重写成员对象中的函数

Override Function in Member Object

本文关键字:函数 成员对象 重写      更新时间:2023-10-16

免责声明:我是一个长期的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成员的初始行为