C ++重载基类内部调用

时间:2014-09-25 21:31:28

标签: c++ inheritance method-overriding

我想覆盖基类中的内部调用,并保持相同的接口和通用算法。更改取决于对象的状态,因此无法在构造函数中设置一次。有没有办法让这个工作?或者也许是一种设计模式?

#include <iostream>
using namespace std;

class X
{
private:
    virtual void internalCall()
    {
        cout << "Class X" << endl;
    }
public:
    X()
    {
        internalCall();
    }
    void externalCall()
    {
        internalCall();
    }
};

class Y : public X
{
protected:
    virtual void internalCall2()
    {
        cout << "Class Y2" << endl;
    }
    virtual void internalCall()
    {
        cout << "Class Y" << endl;
        internalCall2();
    }
    public:
    Y() : X() {}

};

int main()
{
    Y y;

    y.externalCall();

    return 0;
}

期望的输出:

Y类

Y2类

Y类

Y2类

实际输出:

X级

Y类

Y2类

在我的机器上:

X级

X级

1 个答案:

答案 0 :(得分:0)

问题是您是从internalCall()的构造函数调用X。虽然它是一个虚拟函数,但在调用X的构造函数时,Y尚未创建 - 所以你得到X&#39; s internalCall()