C++ 子类B重载父类A的方法funA后,在父类A中调用funA会调用子类B还是父类A的funA方法?

来源:互联网 发布:文泰刻绘软件下载 编辑:程序博客网 时间:2024/05/22 03:06

问题如题,碰到这个问题,于是些代码验证了一下:

class A{public:    virtual void funA()    {        printf("A");    }    void Run()    {        funA();    }};class B : public A{public:    virtual void funA()    {        printf("B");    }};int _tmain(int argc, _TCHAR* argv[]){    B b;    b.Run();return 0;}

如此,通过调用父类的Run方法,来调用funA,结果输出为子类重载后输出的B

奇怪的是,如果不从Run出发,而是通过父类的构造方法,则输出为父类的A,估计是构造顺序问题,构造B时,首先会构造父类A,然后此时A通过构造方法将A输出,此时B并未构造,可能也还没有把funA重载掉,不知道是否正确,求大侠解释!

class A{public:    A()    {        funA();    }    virtual void funA()    {        printf("A");    }    void Run()    {        funA();    }};class B : public A{public:    virtual void funA()    {        printf("B");    }};int _tmain(int argc, _TCHAR* argv[]){    B b;return 0;}


原创粉丝点击