我需要重写c++中基类的构造函数吗

问题描述 投票:0回答:1

我有一个基类 B,我将从它派生类 D。D 中唯一的区别是我重写了一个方法。

我是否必须在 D 中重写 B 的构造函数,因为它所做的只是使用完全相同的参数调用 B 的构造函数? 如果我不在 D 中声明构造函数(在析构函数上),它会只使用 B 的吗? 如果是这样,从哪个版本的 C++ 开始它会这样做。

c++ constructor overriding descendant
1个回答
0
投票

构造函数不能被重写。 他们的作用是正确初始化每个类。

派生类初始化它的变量。 基类初始化它的变量。

您知道您正在构造哪个类,因此不需要虚拟构造函数。 (但是如果你需要创建一个在运行时做出决定的类,你需要知道什么是工厂方法)

但是删除更加棘手(因为您可能持有一个指向基类的指针,该基类被实例化为派生类)

这就是为什么具有虚拟方法的类中的析构函数默认应该是虚拟的(此规则有例外 - 高级主题)。

class Base
{
private:
    int m_secret;

public:
    Base(int magic_number)
        : m_secret(magic_number)
    {}

    virtual int get_secret()
    {
        return m_secret;
    }

    virtual ~Base() = default;
};

class Derived : public Base
{
private:
    int m_multiplier;

public:
    Derived(int magic_number, int multiplier)
        : Base(magic_number),
          m_multiplier(multiplier)
    {}

    int get_secret() override
    {
        return Base::get_secret() * m_multiplier;
    }

    ~Derived() override = default;
© www.soinside.com 2019 - 2024. All rights reserved.