如果我有一个继承自另一个的类,是否可以替换子进程中的继承类?我有一个关于我在下面尝试做的演示,但我不确定语法。
#include <iostream>
class singleNum
{
public:
int m_a;
singleNum(int a)
{
std::cout << "SETUP" << std::endl;
m_a = a;
}
~singleNum()
{
std::cout << "CLOSEDOWN" << std::endl;
}
};
class inheritor : public singleNum
{
public:
inheritor(int a) : singleNum(a) {};
reset(int b)
{
singleNum::this = *singleNum(b);
}
};
int main()
{
inheritor z(5);
std::cout << z.m_a << std::endl;
z.reset(5);
return 0;
}
答案 0 :(得分:6)
您无法交换或重置基类。如果它有自己的重置方法,你可以调用它,但你不能再次调用构造函数。
如果你想这样做,你应该favor composition over inheritance。然后,您可以创建内部组合类的全新实例并替换现有实例。
答案 1 :(得分:1)
您当前的演示并不难实现,但您需要修改父类:
shifts
[ 1. 2. 3. 4. 5. 6. 7. 8. 9.]
但这是你最接近“替换基类”的。如果您的案例与演示的演示不同,并且您需要在已构造的派生对象上调用基类构造函数,那么不,这是不可行的。