をオブジェクトのキャストについての二つの質問:「父」、および「MyClassaを」と、私はこれをしたい:
father* a;
MyClassa b;
a = &b;
((MyClassa *)a) - > b();
私ができます上のサンプル(b()
はMyClassa
クラスに属し、father
クラスにはない関数です)のようなキャストを行います。
しかし、私はこれを行うとき:
father* a;
MyClassa b;
a = &b;
a = ((MyClassa *)a);
a->b();
をそれは私のために仕事をdoesntのと、彼はb()
機能(鋳造のように動作しませんでした)、そのクラスには存在しないことを私に伝えます。
これら2つのコードサンプルの違いは何ですか?また、この違いの原因は何ですか?
質問B
私はこのような子供のように父親をキャストする 'dynamic_castを' を使用し:
Father * fp= new Father;
Child * cp = dynamic_cast<Child *> fp;
それは私にポインタを '0' の値を返します。 しかし、私は参照して同じことを行うとき:
Father & fp= new Father;
Child & cp = dynamic_cast<Child &> fp;
それはエラー「悪いキャスト」を発生させます。
なぜ違いがありますか?この行の
は私たちに、より完全な例を与えるも、多型の観点で「間違った」子供に父親からの参照をキャストすることは不可能だ、と。 「MyClassa」のクラス宣言はどのように見えるのですか? –
[MCVE]を表示してください。 –
これらの質問は無関係ですので、それらを分けてください。 – Tali