免责声明:我是一名很长时间的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
作为结构并使用函数指针,但我想在这里避免使用它。
答案 0 :(得分:0)
您可以使用std :: function来模拟多态性。
class B
{
public:
std::function<_FUNCTION_SIGNATURE_HERE_> print;
};
然后你总是可以在B
的实例中覆盖print成员 a.bprime.print = SomeOTherFunctionWithSameSignature;
从bprime的这一刻开始,就好像它是层次结构中的不同子类一样。除了你改变的这个特殊功能外,一切都会起作用。
当然,您必须在构造函数中设置print成员的初始行为。