Для уточнения ответа Эндрю, если вы действительно хотите убедиться, что все из base
членов заданы только один раз, и самым эффективным способом вы можете использовать инициализатор списка, а не установка значений в конструкторе.
class base {
public:
int x, y, z;
base() : x(0), y(0), z(0) {};
base( int xval, int yval, int zval ) :
x(xval), y(yval), z(zval)
{ };
};
class derived : public base {
public:
derived() : base( 0, 0, 5 ) {};
};
Большинство компиляторов генерируют тот же код для : x(_x), ...
, что и просто установки значений в конструкторе, но я видел пару, которая этого не сделала.