使用下面的代码,我有以下关于隐藏/覆盖的问题:
1) 如果我用 p 调用 DoStuff,将调用哪个 DoStuff 实现?
2) 如果我从 Drive 的 Prius 实现中删除“virtual”关键字,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);
}