是否可以替换父类?

Is it possible to replace a parent class?

本文关键字:父类 替换 是否      更新时间:2023-10-16

如果我有一个从另一个类继承的类,是否可以替换子类中的继承类?我在下面演示了我正在尝试做的事情,但我不确定语法。

#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;
}

不能交换或重置基类。如果它有自己的重置方法,则可以调用此方法,但不能再次调用构造函数。

如果你想这样做,你应该更喜欢组合而不是继承。然后,您可以创建内部组合类的全新实例并替换现有实例。

您当前的演示并不难实现,但您需要修改父类:

#include <iostream>
class singleNum
{
public:
int m_a;
singleNum(int a)
{
std::cout << "SETUP" << std::endl;
reset(a);
}
~singleNum()
{
std::cout << "CLOSEDOWN" << std::endl;
}
virtual void reset(int b)
{
m_a = b;
}
};

class inheritor : public singleNum
{
public:
inheritor(int a) : singleNum(a) {}
void reset(int b) override
{
singleNum::reset(b);
}
};

int main()
{
inheritor z(5);
std::cout << z.m_a << std::endl;
z.reset(5);
return 0;
}

但这是最接近"替换基类"的。如果您的情况与演示不同,并且您需要在已构造的派生对象上调用基类构造函数,则不,这是不可行的。