- C++相談室 part114
378 :デフォルトの名無しさん[sage]:2014/10/21(火) 01:30:24.30 ID:xnLzWUl1 - これを実行すると
class MyBase{ public: int method(){ return 10; } }; class MyDerived :public MyBase{ public: int method(){ return 20; } }; void main(){ MyBase mb = MyDerived(); int x = mb.method(); // = 10 } x=10 になるんですが、C#で同じような処理をすると20が戻ります。 C++でもMyDerivedのmethodを実行して20が戻るようにすることは出来ますか?
|
- C++相談室 part114
380 :デフォルトの名無しさん[sage]:2014/10/21(火) 01:45:12.43 ID:xnLzWUl1 - >>379
レスありがとうございました。 早速やってみたのですが、10でした。
|
- C++相談室 part114
383 :デフォルトの名無しさん[sage]:2014/10/21(火) 01:54:51.85 ID:xnLzWUl1 - >>380,381
ありがとうございました。 無事にできました。virtual overrideとポインタが必要だったんですね。 勉強になりました。
|
- C++相談室 part114
384 :383[sage]:2014/10/21(火) 21:35:24.11 ID:xnLzWUl1 - ---- header.hpp ---
using namespace std; class MyBase{ public: MyBase *p; MyBase(){}; MyBase(int n); virtual ~MyBase(); }; class MyDerived : public MyBase{ public: int N; MyDerived(){}; MyDerived(int n){ N = n; }; }; ---- main.cpp ----- MyBase::MyBase(int n){ this->p = new MyDerived(n); } MyBase::~MyBase(){ delete this->p; // ここでエラーします。 } void main() { MyBase *mb = new MyBase(2); delete mb; } デストラクタの書き方が良く分りません。最後にdeleteを実行すると エラーするんですが、どうやれば良いのか3時間くらい考えても分りません。 だれか教えてください。
|
- C++相談室 part114
390 :383[sage]:2014/10/21(火) 22:18:54.96 ID:xnLzWUl1 - みなさん有難うございました。
無事解決しました。助かりました。 >>387 どのあたりが悪いかできればもう少し詳しく指摘お願いします。 >>388 お勧めの方法ありましたら、アドバイスお願いします。 ググりながら自己流で勉強しているので、分らないことだらけです。
|