我想覆盖基类中的内部调用,并保持相同的接口和通用算法。更改取决于对象的状态,因此无法在构造函数中设置一次。有没有办法让这个工作?或者也许是一种设计模式?
#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级
答案 0 :(得分:0)
问题是您是从internalCall()
的构造函数调用X
。虽然它是一个虚拟函数,但在调用X
的构造函数时,Y
尚未创建 - 所以你得到X
&#39; s internalCall()
。