首页 > 解决方案 > 继承基类的构造函数

问题描述

对于以下代码:

struct Base
{
protected:
    Base(){}
    Base(int) {}
};


struct Derive : public Base
{
public:
    using Base::Base;
};


int main()
{
    Derive d1;
    Derive d2(3);
}

似乎 d1 可以正确构造,但 d2 无法构造。

所以我的问题是:为什么using Base::Base只能将默认构造函数更改为 public 并将带有 int 参数的构造函数保持为受保护?

非常感谢!

标签: c++

解决方案


如果要向基类构造函数发送参数,只需通过派生类构造函数发送参数即可。

在您的代码中使用是没有用的,如下所示。下面的功能工作正常。

#include <iostream>

using namespace std;

struct Base
{
protected:
    Base() {}
    Base(int) {}
};


struct Derive : public Base
{
public:
    //using Base::Base;
};


int main()
{
    Derive d1;
    //Derive d2(3);
    return 0;
}

请注意,我没有使用“使用”。但是由于我没有将任何参数传递给“d1”对象,因此将通过派生类默认构造函数调用基类构造函数(没有参数的构造函数)。但是如果你想向基类发送参数,你只需要通过派生类发送它,如下所示。

#include <iostream>

using namespace std;

struct Base
{
protected:
    Base() {}
    Base(int y) {};
};


struct Derive : public Base
{
public:
    Derive()
    {
        
    };
    
    Derive(int x) : Base(x) {
    }
};


int main()
{
    Derive d1;
    Derive d2(3);
    return 0;
}

推荐阅读