このコードは、実行時に適切なメッセージをコンソールに出力することを拒否します。参照の代わりにポインタを使用すると動作するようです( - の代わりに - >)。私はOOPに新しいので、あなたがこれをばかげて見つけたら私を許してください。基本クラスへの参照を通じて仮想関数を呼び出す
#include <iostream>
using namespace std;
class instrument {
public:
virtual void play(){}
};
class drum : public instrument {
public:
void play(){
cout << "dum, dum" << endl;
}
};
class piano : public instrument {
public:
void play(){
cout << "pling" << endl;
}
};
int main(){
instrument i;
piano p;
drum d;
instrument &pi = i;
pi.play(); // -
pi = p;
pi.play(); // pling
pi = d;
pi.play(); // dum, dum
}
参照を初期化時にバインドしたオブジェクトから参照を変更することはできません。今すぐあなたの発射割り当て演算子(およびプロセスでの[オブジェクトのスライス](http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c/274634#274634)のトリガー)。 – WhozCraig
これを答えてください、そうでしょうか? – jrok
問題がありますが、基本クラスに仮想デストラクタを作成する必要があります。 –