繁体   English   中英

在基类和派生类中初始化类成员变量

[英]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构造函数,它使用initinit基类中的var1成员变量,然后使用process()函数初始化ab成员变量,这取决于设置为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM