面试题 C++ 动态绑定 虚函数

来源:互联网 发布:卡祖笛淘宝 编辑:程序博客网 时间:2024/06/04 00:20
#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////
0 0
原创粉丝点击