根据我的理解,以下代码将按此顺序执行:
- 派生的构造函数被调用。
- 基础对象是使用默认基础构造函数构造的。
- 执行派生构造函数的主体。
如果是这样,成员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/