C++重载基类内部调用
Posted
技术标签:
【中文标题】C++重载基类内部调用【英文标题】:C++ overloading a base class internal call 【发布时间】:2014-09-25 21:31:27 【问题描述】:我想覆盖基类中的内部调用并保持相同的接口和通用算法。更改取决于对象的状态,因此不能只在构造函数中设置一次。有没有办法让它工作?或者也许是一种设计模式?
#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 级
【问题讨论】:
发布一些实际编译的代码,您将看到预期的输出。请参阅此示例:ideone.com/GN4jeh 请显示您针对此问题的实际代码,您发布的内容正常:ideone.com/0K9LX7 相关阅读:***.com/questions/2170688/private-virtual-method-in-c 所以显然我的代码更复杂,但是当内部调用在构造函数中时,我已经复制了一半。最后一次通话我仍然有不同的行为,不知道发生了什么。 ideone.com/EzLRyG @Envy - 你期望它做什么?X() internalCall();
【参考方案1】:
问题是您正在从X
的构造函数调用internalCall()
。尽管它是一个虚函数,但在调用 X
的构造函数时,Y
尚未创建 - 所以你会得到 X
的 internalCall()
。
【讨论】:
是的,我知道那个,但我仍然不明白为什么在我的机器上我得到 Class X Class X 您必须更具体地了解您的环境。我无法复制您的输出:ideone.com/h0qjTM以上是关于C++重载基类内部调用的主要内容,如果未能解决你的问题,请参考以下文章
C++ - 让派生类从基类“继承”重载赋值运算符的安全/标准方法