我希望如果foo
在 class 中声明D
,但未标记为 virtual,则以下代码将调用foo
in的实现D
(无论 的动态类型如何d
)。
D& d = ...;
d.foo();
但是,在下面的程序中,情况并非如此。谁能解释一下?如果方法覆盖了虚函数,它会自动为虚函数吗?
#include <iostream>
using namespace std;
class C {
public:
virtual void foo() { cout << "C" << endl; }
};
class D : public C {
public:
void foo() { cout << "D" << endl; }
};
class E : public D {
public:
void foo() { cout << "E" << endl; }
};
int main(int argc, char **argv)
{
E& e = *new E;
D& d = *static_cast<D*>(&e);
d.foo();
return 0;
}
上述程序的输出是:
E