方法1:通过dervive类的构造函数初始化
class base {
protected:
int no;
public:
void showData() {
cout << no;
}
};
class der : public base {
public:
der(int _no) {
no = _no;
}
};
方法2:通过基类的构造函数初始化
class base {
int no;
protected:
base(int _no) : no(_no){}
public:
void showData() {
cout << no;
}
};
class der : public base {
public:
der(int _no) : base(_no) {
}
};
客户代码:
der d(10);
d.showData();
如果有其他方法,请告诉我
答案 0 :(得分:3)
您应该使用第二种方法,原因之一是:如果基类成员是private
,则方法一不起作用。看到派生类初始化不属于它的东西也很奇怪。
答案 1 :(得分:2)
每个班级应该初始化该班级中的字段。所以第二个变种。
答案 2 :(得分:2)
显然是出于各种原因的第二种选择:
答案 3 :(得分:0)
我强烈选择方法2,因为构造函数也可能比初始化变量更复杂。此外,case
中的私人成员无法在der
中设置。
答案 4 :(得分:0)
第二种是正确的方法。最好用构造函数初始化,这就是它们的用途。如果您有多个派生类,您会怎么做?如果你想自己创建基类对象怎么办?将初始化代码放在构造函数中,这就是C ++的工作方式。
答案 5 :(得分:0)
始终使用ctor-initializer初始化事物。因为这是您可以真正初始化事物的唯一地方。在任何地方写no=no_
将分配到已初始化的变量。对于UDT,这可能是一个很大的区别,对于甚至不可能的引用,你总是必须初始化它们。
因此,为了均匀性,在任何地方都使用ctor-initalizer。