使用基类构造函数的子类构造函数的大纲定义
outline definition of sub class constructor using base class constructor
我想使用子类的基类但不使用初始值设定项列表为子类定义构造函数。我的意思是为什么我不能在子类构造函数中使用基类构造函数,而是在子类范围之外。
class base
{
public:
base(int _x);
protected:
int x;
};
base::base(int _x)
{
x = _x;
}
class sub : public base
{
public:
sub(int _x, int _r);
private:
int r;
};
sub::sub(int _x, int _r)
{
base(_x); // here I got syntax error
r = _r;
}
我知道我可以像这样使用初始化列表:
sub(int _x, int _r) : base(_x), r(_r) {};
但我想知道为什么使用上面的第一个代码是错误的,我得到语法错误正如我提到的。
这是
错误的:
sub::sub(int _x, int _r)
{
// Too late...
}
一旦进入sub
构造函数主体,就必须构造base
类。
由于未在初始值设定项列表中指定任何构造函数,因此编译器会尝试调用默认构造函数,但base
没有构造函数。
这就是您收到no matching function for call to 'base::base()'
错误的原因。
您可以改为执行以下操作:
sub::sub(int _x, int _r) : base(_x)
{
r = _r;
}
无需再调用默认构造函数,因此它可以工作。
另外,您不应该尝试手动调用构造函数。
这:
base(_x); // here I got syntax error
实际上创建一个临时base
对象,它不调用当前对象构造函数。
相关文章:
- 具有enable_if外部类原型的模板类构造函数定义
- 构造函数定义中类声明中的模板值
- C++中的继承和构造函数定义
- 如何使用模板化构造函数定义演绎指南?
- 构造函数定义C
- 不正确的成员构造函数定义
- 具有虚拟多重继承的构造函数定义
- C++谷歌测试在哪里放置测试夹具构造函数定义
- 模板类定义中的模板构造函数定义
- C++下面给出的代码中的构造函数定义差异
- 带继承的构造函数定义
- 无法访问构造函数定义之外的变量
- 调用构造函数定义中的函数后收到Segmentation Fault 11错误
- 将具有默认值的构造函数定义为组合对象的私有字段
- 防止重新定义构造函数定义的方法
- 继承构造函数-定义可移植的固定大小类型(C++)
- 在类的私有部分为复制构造函数定义原型如何防止类的复制
- 如何指定继承类的构造函数定义
- 了解默认移动构造函数定义
- 理解构造函数定义块的语法变化