class A
{
public:
virtual void foo() { cout << "A" << endl; }
};
class B : public A
{
public:
void foo() { cout << "B" << endl; }
};
class C : public B
{
public:
void foo() { cout << "C" << endl; }
};
int main()
{
A *a = new A;
B *b = new B;
C *c = new C;
a->foo(); //A
b->foo(); //B
c->foo(); //C
A *ab = new B;
A *ac = new C;
ab->foo(); //B
ac->foo(); //C, why?
return 0;
}
我有一个关于虚函数和覆盖继承的简单问题。 ac->foo()
如何打印"C"
? foo()
中的class B
函数未声明为虚函数。为什么它会在C类中被覆盖?
我将ab->foo()
打印出"B"
,因为class A
中的函数是虚函数。
如果我从A::foo()
删除虚拟广告并仅将其声明为void foo()
,则ab->foo()
和ac->foo()
都会打印出"A"
。