class B { private: int m_data; public: B(int data=1) { m_data=data; } int doGetData() { return m_data; } ~B() { } void test() { Speaker(); } virtual void Speaker() { cout<<"B is speaking!"<<endl; } }; class C:public B { protected: int m_data; public: C(int data=2) { m_data=data; } ~C() { } void Speaker() { cout<<"C is speaking!"<<endl; } }; int main() { C c(10); c.B::Speaker(); //c.B::test(); return 0; }
运行后显示结果如下:
c.B::Speaker()显示B is speaking;
c.B::test()显示C is speaking;
明白B中虚表在内存中的结构,为什么直接调用B::Speaker能直接使用B类中的虚函数??
可能是语法上的规定吧
是么?
virtual 也会被继承下来。
c中实际上是定义了 virtual Speaker()
c.B::Speaker()直接指向了B的成员函数
c.B::test()直接指向了B的成员函数,由于this仍未c类型, 下一步继续调用c的Speaker()
求轻拍