是否可以替换父类?

时间:2017-05-15 15:08:23

标签: c++

如果我有一个继承自另一个的类,是否可以替换子进程中的继承类?我有一个关于我在下面尝试做的演示,但我不确定语法。

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

2 个答案:

答案 0 :(得分:6)

没有

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

如果你想这样做,你应该favor composition over inheritance。然后,您可以创建内部组合类的全新实例并替换现有实例。

答案 1 :(得分:1)

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

shifts
[ 1.  2.  3.  4.  5.  6.  7.  8.  9.]

但这是你最接近“替换基类”的。如果您的案例与演示的演示不同,并且您需要在已构造的派生对象上调用基类构造函数,那么不,这是不可行的。