C++重载基类内部调用
C++ overloading a base class internal call
我想覆盖基类中的内部调用,并保持相同的接口和通用算法。更改取决于对象的状态,因此不能在构造函数中只设置一次。有办法让它发挥作用吗?或者可能是这样的设计模式?
#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类
问题是您从X
的构造函数调用internalCall()
。尽管它是一个虚拟函数,但在调用X
的构造函数时,Y
还没有创建——所以您得到了X
的internalCall()
。
相关文章:
- join() 失败,如果在线程内部调用 io_context.run()
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- OpenMP 内部的函数调用用于循环
- std::使用内部对象移动 - 与调用不匹配
- 从动态加载的 dll 内部调用C++函数
- 虚拟基类在内部如何工作?编译器如何解析对基方法的调用?
- 如何在JNI中从线程内部调用JAVA方法
- 正确的方法是什么?调用指针到指针到指针内部的函数?
- 在为函数编写单元测试时,我应该模拟所做的内部函数调用吗?
- 编译在 Python 代码内部调用的 C++ 代码时出错,使用 Boost Python
- COUT 内部函数调用的顺序
- 在VC++中从DLLMAIN内部调用D3D的CREATEDEVICE时,它会创建一个死锁(loaderlock?)。有没有办法克服这个问题?最终目标内
- 仅执行一次函数一次内部循环,该循环在每个0.1秒C 处都被调用
- C++ While(1) 循环内部没有调用 if 语句
- C++ ld 链接器 --wrap 选项不适用于内部函数调用
- 在成员函数内部调用成员函数
- 从系统调用内部生成调用堆栈
- 干净编码:如何从循环中的函数调用内部中断循环
- 调用内部虚拟函数的c++函数
- 在C++中的函数调用内部执行强制转换时,强制转换是否真的有效