c++ - 使用具有继承性的构造函数基类和成员初始值设定项列表

标签 c++ inheritance constructor default-constructor

我有一个问题,关于如何为从基类的构造函数继承的派生类的构造函数使用初始化列表。

这是有效的代码:

class base {

public:
  base():x(0) {}
  base(int a):x(a) {}

private:
  int x;
};

class derived : public base {

public:
  derived():base():y(0) { y=0; } 
  derived(int a, int b):base(a) { y=b; }

private:
  int y;
};

但是,我想直接使用成员初始化列表来初始化变量,这会导致错误:

class base {

public:
  base():x(0) {}
  base(int a):x(a) {}

private:
  int x;
};

class derived : public base {
public:
  //derived():base():y(0) {}  //wrong
  //derived(int a, int b):base(a):y(b) {}  //wrong
  derived():base(), y(0) {}  // corrected
  derived(int a, int b): base(a), y(b) {}  //corrected

private:
  int y;
};

从另一个构造函数继承的构造函数使用初始化列表的正确语法是什么?

谢谢:)

最佳答案

正如 Dieter 所指出的,您可以轻松地在一个构造函数中包含多个初始化器,它们只需用逗号 (,) 而非列 (:) 分隔即可。

你派生的类应该是:

class derived : public base {
public:
  derived():base(),y(0) {} 
  derived(int a, int b):base(a),y(b) {} 

private:
  int y;
};

关于c++ - 使用具有继承性的构造函数基类和成员初始值设定项列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27766281/

相关文章:

c++ - 如何组合两个 Boost Geometry 变压器?

c++ - std::atomic::load 如何实现

java - java中泛型类的父类(super class)

c++ - 在主线程之外的计时器或命令上销毁/替换线程

c++ - C++中的继承问题

C++继承和模板不编译

java - 使用多个参数从 MyClass.class 创建实例

java - java程序中的抽象

JavaScript 匿名构造函数 : ! function(){}();

c++ - 在 C++ 中序列化对象