面试题 C++ 动态绑定 虚函数 Dear 丶 2022-08-18 03:16 101阅读 0赞 #include <iostream> using namespace std; class A { public: A ():m_iVal(0){ test(); } virtual void func() { std::cout<<m_iVal<<""; } void test(){ func(); } public: int m_iVal; }; class B : public A { public: B(){ test(); }; virtual void func() { ++m_iVal; std::cout<<m_iVal<<""; } }; int main(int argc ,char* argv[]) { A*p = new B; p->test(); return 0; } // 用A 基类的指针 去 引用一个 子类 ,就可能会发生 动态绑定 // 初始化B的时候,因为B是从A继承来的,所以要先初始化一个A // A的构造函数,调用的 test(), 打印出0 // // 进行B的构造函数,调用test(), test()中又会去调用func ,这是func发生动态绑定, // 调用B的func, ++m_iVal之后, 打印出1 // // 然后运行到 p->test() // 又调用到子类的 test(), 再调用func(), 又发生动态绑定 ++m_iVal, 之后,又打印出 2 // // 所以结果是 // // 012 // //
还没有评论,来说两句吧...