こんばんは、今日の晩御飯は焼きそばです。
今回keitoさんがやっているのは
「今日はパンがたべたいな」「じゃあ焼きそばにするね^^」
のようなことです。
ごめんなさい、焼きそばがうれしくて調子に乗りました^^;
コード:
class A;//中身は省略
class B;
class C : public A;
class MyClass
{
public:
A* a;
A* b;
A* c;
};
int main()
{
MyClass obj;
obj->a=new A();//ok
obj->b=new B();//error
obj->c=new C();//ok!
}
簡単に説明すると、
ポインタに違う型のポインタを代入しようとするからエラーになります。
(int*にchar*入れちゃダメ!みたいなイメージ)
詳しく説明すると
クラスの継承にはポインタを使います。
なぜポインタを使うのでしょうか?
それはポインタのメモリサイズが同じだからです。
じゃあ違う型のポインタ入れてもいいじゃん!
ダメなんです^p^詳しい理由は知りません^p^
じゃあなんで基底クラスのポインタに継承クラスのポインタを入れてもいいんですか?
基底クラスでできることは継承クラスでもできますよね?
じゃあ基底クラスの機能だけ使うっていうんなら特別に許してやろう^^
って感じで継承クラスのポインタを入れられるわけです。
正しい知識はググってください^^;
[hr]
まとめ
・ポインタに違う型のポインタを入れたらエラー
・基底クラスのポインタに継承クラスのポインタを入れるのはok!
・そのポインタでできることは基底クラスでできることのみ。
[hr]
訂正とお詫び
質問を読み直してみたところ、私の指摘がトンデモなことに気づきましたorz
例えるなら、ナポリタンを焼きそばと言い張るような、、、
すみません、黙ります^^;