- 【初心者歓迎】C/C++室 Ver.90【環境依存OK】
966 :デフォルトの名無しさん[sage]:2014/05/20(火) 07:57:00.60 ID:LPSd8BiO - >>961,962
テンプレート初心者なのですが、このクラスを使うときには どんな風に記述するのでしょうか?
|
- 【初心者歓迎】C/C++室 Ver.90【環境依存OK】
980 :デフォルトの名無しさん[sage]:2014/05/20(火) 23:01:55.95 ID:LPSd8BiO - #include <iostream>
using namespace std; class myBase{ public: virtual void method(){ cout << "myBaseMethod" << endl; }; }; class myClass:public myBase{ public: virtual void method() override{ cout << "myClassMethod" << endl; }; }; void main(){ myBase *pmb = new myClass(); pmb->method(); myBase mb = myClass(); mb.method(); } これ実行すると myClassMethod myBaseMethod と出るんですが、どうして二番目の方法ではoverrideできないのでしょうか? 数時間悩んだのですが分りません。ポインタを使わないとoverrideできない のでしょうか?
|
- 【初心者歓迎】C/C++室 Ver.90【環境依存OK】
989 :デフォルトの名無しさん[sage]:2014/05/20(火) 23:50:20.20 ID:LPSd8BiO - みなさんありがとうございます。
myBase &mbr = myClass(); mbr.method(); と書き換えたらoverrideできました。 でもまだよく分らないのですが、 > myBase mb; > これだけでmyBaseの実体ができる > これに何を代入してもmbはmyBaseのまま > 構造体としてのデータのコピーが起こるだけ データのコピーが起こったらmbの実体がmyClassに変わるのではないですか? その結果、myClassのMethod()が呼び出されると思ったのですが。
|