我有一个关于如何使用初始化列表来构造派生类的构造函数的问题,这些构造函数继承自基类的构造函数。
这是有效的代码:
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;
};
从另一个构造函数继承以使用初始化列表的构造函数的正确语法是什么?
谢谢:)
答案 0 :(得分:1)
如Dieter所述,您可以在构造函数中轻松拥有许多初始值设定项,只需使用逗号(,
)而不是列(:
)进行分隔。
您派生的类应为:
class derived : public base {
public:
derived():base(),y(0) {}
derived(int a, int b):base(a),y(b) {}
private:
int y;
};
答案 1 :(得分:0)
derivedClass::derivedClass(argumentsSetOne, argumentsSetTwo, .....) : baseClassOne(argumentsSetOne) , baseClassTwo(argumentsSetTwo) { }
顺序并不重要......我的意思是,您可以在Derived Class的构造函数的参数字段中指定argumentsSetTwo
之前的argumentsSetOne
。但同样它应该与原型中指定的相同....