c++ - 对派生类 C++ 使用不同的基构造函数

标签 c++ inheritance constructor

根据我的理解,以下代码将按此顺序执行:

  1. 派生的构造函数被调用。
  2. 基础对象是使用默认基础构造函数构造的。
  3. 执行派生构造函数的主体。

如果是这样,成员z不就被赋值了两次吗?

class base {
public:
    int x, y, z;
    base() {x = 0; y = 0; z = 0;};
};

class derived : public base {
public:
    derived() {z = 5;};
};

是否有更有效的方法来创建类“派生”的对象,以便它使用不同的构造函数,在本例中,该构造函数只会为成员 x 和 y 分配一个值,而让 z 在 derived( )?

最佳答案

是的,有一种更高效的方式,但是会占用更多的代码(从而增加维护开销)。

class base {
public:
    int x, y, z;
    // Default constructor
    base() {x = 0; y = 0; z = 0;};
    // Constructor to be called if you want to override the z value
    base(int zValue) { x=0; y=0; z=zValue; };
};

class derived : public base {
public:
    derived() : base(5) {};
};

关于c++ - 对派生类 C++ 使用不同的基构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7061345/

相关文章:

c++ - 包含结构 vector 的类的展平 vector

c++ - 多个 "level"派生抽象类

c++ - 它们在隐式构造函数、无参数空体构造函数和显式默认构造函数之间是否等效?

c++ - 为什么 is_constructible 声称某些东西不是可构造的?

c++ - 在编译时已知成员时在函数分支删除中

c++ - C++ 中 TCP 服务器套接字打开失败

c++ - 动态替换正在播放的 gstreamer 管道中的元素

c++ - 是否可以有一个变量,该变量是对具有不同类标识符的模板类的引用?

oop - 覆盖方法 - 调用覆盖实现( super )或不调用?

c# - 接口(interface)的用途和继承方面的区别