[英]Order of member variables initialization of the base class in the derived class (constructor)
[英]initialization of class member variables in base and derived classes
假设我们有一个Base
类和一个Derived
类:
class Base {
public:
Base(int x) : var1(x)
int process(){
//return some function of var1
}
protected:
int var1;
}
class Derived : public Base {
Derived(int init) : Base(init), a(process()), b(process()) {}
protected:
int a;
int b;
}
换句话说,当我们初始化Derived
,我们假设首先调用Base
构造函数,它使用init
值init
基类中的var1
成员变量,然后使用process()
函数初始化a
和b
成员变量,这取决于设置为var1
的值。
请注意,为了使此代码更正,我们需要确保在a(process())
和b(process())
之前调用Base(init)
b(process())
。
在C ++中假设将保持上述初始化顺序是否有效? 或者我是否需要将Derived
构造函数更改为以下内容以保证初始化顺序?
Derived(int init) : Base(init) {
a = process();
b = process();
}
订单有保证,您无需做任何事情。 基础在成员之前初始化(按声明的顺序)。 成员初始化在它们被声明的顺序[class.base.init] / 13 (注:声明,而不是为了在其中MEM-初始化出现在构造函数初始化列表的顺序)。
你也可以依赖基地和成员被摧毁的顺序与他们被初始化的顺序完全相反......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.