gpt4 book ai didi

c++ - 为什么我的 C++ 子类需要显式构造函数?

转载 作者:可可西里 更新时间:2023-11-01 15:00:29 25 4
gpt4 key购买 nike

我有一个声明和定义构造函数的基类,但出于某种原因,我的公共(public)派生类没有看到该构造函数,因此我必须在派生类中显式声明一个转发构造函数:

class WireCount0 {
protected:
int m;
public:
WireCount0(const int& rhs) { m = rhs; }
};

class WireCount1 : public WireCount0 {};

class WireCount2 : public WireCount0 {
public:
WireCount2(const int& rhs) : WireCount0(rhs) {}
};

int dummy(int argc, char* argv[]) {
WireCount0 wireCount0(100);
WireCount1 wireCount1(100);
WireCount2 wireCount2(100);
return 0;
}

在上面的代码中,我的 WireCount1 wireCount1(100) 声明被编译器拒绝(“No matching function for call to 'WireCount1::WireCount1(int)'”),而我的 wireCount0wireCount2 声明没问题。

我不确定我是否理解为什么我需要提供 WireCount2 中显示的显式构造函数。是否因为编译器为 WireCount1 生成了默认构造函数,而该构造函数隐藏了 WireCount0 构造函数?

作为引用,编译器是i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5659)

最佳答案

构造函数不是继承的。您必须为派生类创建一个构造函数。此外,派生类的构造函数必须调用基类的构造函数。

关于c++ - 为什么我的 C++ 子类需要显式构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3217441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com