重写成员对象中的函数
Override Function in Member Object
免责声明:我是一个长期的C程序员,正在转向c++,所以很有可能有更好的方法来做到这一点。
我想创建一个class A
,其中class B
有1到N个成员。在大多数情况下,我可以调用class B
的成员函数。然而,在某些情况下,我想重写 class B
中的成员函数。是否有一种优雅的方法来做到这一点,而不必每次都从class B
创建派生类?
下面是一个例子:
using namespace std;
#include <iostream>
class B
{
public:
void print();
};
void B::print()
{
cout << "B::print" << endl;
}
class A
{
public:
B b;
B bprime;
};
int main()
{
A a;
a.b.print();
a.bprime.print();
return 0;
}
是否有办法在bprime
中覆盖print()
函数或以其他方式改变它?在C中,我会将class B
作为结构体并使用函数指针,但我想在这里避免这种情况。
可以使用std::function来模拟多态性
class B
{
public:
std::function<_FUNCTION_SIGNATURE_HERE_> print;
};
则可以在B
的实例中重写print成员 a.bprime.print = SomeOTherFunctionWithSameSignature;
从现在开始,bprime将表现得好像它是层次结构中的另一个子类。除了你修改的这个函数,其他的都是一样的。
当然你必须在构造函数中设置print成员的初始行为
相关文章:
- 如何使用指针传递给函数的数组中对象的函数成员
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- 在没有复制构造函数的对象的成员函数中启动 std::thread
- C++是否有定义的方法来传递指向类的成员对象的成员函数的指针
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 声明成员对象而不调用其默认构造函数
- 使用成员函数打印对象
- 应该在成员对象上调用析构函数
- 调用成员对象的构造函数
- 使用成员函数更改对象或返回并分配它是否被认为是更好的做法?
- 没有默认构造函数的对象成员的 wig setter
- 使用std ::函数在对象列表上调用任何对象成员函数
- 构造函数,成员对象
- 如果要调用多个成员函数,对象编辑器是否是一种好方法?
- 实例对象如何查看函数的对象参数的私有成员?
- C 将成员对象函数分配给类成员功能
- 成员对象的地址在构造函数之后立即更改
- 有没有办法使类成员对象的模板调用不同的构造函数?
- ROS:将回调函数和对象成员绑定到订阅节点
- 有条件地构造没有默认构造函数的成员对象