父类父类中的虚函数

Khu*_*ram 5 c++ virtual-functions late-binding

以下代码是后期绑定test()方法,但不应该提前绑定?因为test()方法在B类中不是虚拟的(但在A类中),我们使用的是B类的指针.

class A{
    public:
        virtual void test(){
            cout<<"test a";
        }
};
class B : public A{
    public:
        void test(){
            cout<<"Test b";
        }
};
class C: public B{
    public:
        void test(){
            cout<<"test c";
        }
};
int main(){
    B *bp;
    C objc;
    bp = &objc;
    bp->test();  // test c
}
Run Code Online (Sandbox Code Playgroud)

JBL*_*JBL 5

一旦virtual在类中声明了一个函数,它在从该类继承的类中始终是虚拟的,无论您是否使用该virtual关键字.

所以在你的课堂上C,这个test()功能实际上是覆盖BA自己的test()功能.