以下のコードで、非表示/オーバーライドに関して次の質問があります。
1)pを使用してDoStuffを呼び出す場合、どのDoStuff実装が呼び出されますか?
2)ドライブのプリウス実装から「仮想」キーワードを削除しても、DoStuff(p)は引き続き機能しますか?
3)DoStuff(t)を除いて、上記と同じですか?
4)に変更Car* c
するToyota *t
(上記の質問に固有でない一般的なアドバイスは大歓迎です)
class Car
{
public:
virtual void Drive();
};
class Toyota : public Car
{
public:
virtual void Drive();
};
class Prius : public Toyota
{
public:
virtual void Drive();
};
void DoStuff(Car* c)
{
c->Drive();
}
int main()
{
Car* c = new Car();
Toyota* t = new Toyota();
Prius* p = new Prius();
DoStuff(c);
DoStuff(t);
DoStuff(p);
}