c++ - 继承基类的构造函数
问题描述
对于以下代码:
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 参数的构造函数保持为受保护?
非常感谢!
解决方案
如果要向基类构造函数发送参数,只需通过派生类构造函数发送参数即可。
在您的代码中使用是没有用的,如下所示。下面的功能工作正常。
#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;
}
推荐阅读
- r - 将 Reshape2 有条件地应用于数据帧
- algorithm - 找到所有相同长度的最短唯一子串?
- spring-boot - 如何在 Spring Boot JPA 中查询与条件的多对多关系
- android - 如何允许用户从 Firebase 中删除自己的帖子?
- c# - Selenium c# - 与 Chrome 浏览器相比,使用 IE11 时 FindElemnt 方法的执行速度较慢
- javascript - Minecraft pe yaw 大于 360 度小于 0 度
- ios - 以编程方式在场景之间转换的问题
- homebrew - 我正在尝试在 Tesseract 上安装阿拉伯语数据,但是当我这样做时,它给了我这个:
- openrefine - 在 OpenRefine 中将可变数量的行转换为列
- raspberry-pi - 找不到 Yocto 食谱