派生クラスと基本クラス間のポインタ間の変換?
-
22-09-2019 - |
質問
次の C++ プログラムについて:
class Base { };
class Child : public Base { };
int main()
{
// Normal: using child as base is allowed
Child *c = new Child();
Base *b = c;
// Double pointers: apparently can't use Child** as Base**
Child **cc = &c;
Base **bb = cc;
return 0;
}
GCC は、最後の代入ステートメントで次のエラーを生成します。
error: invalid conversion from ‘Child**’ to ‘Base**’
私の質問は 2 つの部分に分かれています。
- Child** から Base** への暗黙的な変換がないのはなぜですか?
- この例は、C スタイルのキャストまたは
reinterpret_cast
. 。これらのキャストを使用することは、型安全性をすべて放棄することを意味します。これらのポインターを暗黙的にキャストするために、または少なくとも使用できるように変換を表現するために、クラス定義に追加できるものはありますか?static_cast
その代わり?
解決
これが許可された場合は、あなたがこれを書くことができます:
*bb = new Base;
そしてc
はBase
のインスタンスを指すことになります。悪います。
所属していません StackOverflow