覆盖孙子类中的虚函数

时间:2016-03-19 21:25:00

标签: c++ inheritance virtual override

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"

0 个答案:

没有答案