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