覆盖成员对象中的函数

时间:2015-07-10 13:58:08

标签: c++ oop

免责声明:我是一名很长时间的C程序员进入C ++,所以很可能/有可能​​有更好的方法来做到这一点。

我想创建一个class A,其中包含1到N个class B成员。在大多数情况下,我很好地调用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;
}

有没有办法覆盖print()中的bprime功能或以其他方式更改它?在C中,我会将class B作为结构并使用函数指针,但我想在这里避免使用它。

1 个答案:

答案 0 :(得分:0)

您可以使用std :: function来模拟多态性。

class B
{
    public:
    std::function<_FUNCTION_SIGNATURE_HERE_> print;
};

然后你总是可以在B

的实例中覆盖print成员
   a.bprime.print = SomeOTherFunctionWithSameSignature;

从bprime的这一刻开始,就好像它是层次结构中的不同子类一样。除了你改变的这个特殊功能外,一切都会起作用。

当然,您必须在构造函数中设置print成员的初始行为。