gpt4 book ai didi

c++ - 基类和派生类中类成员变量的初始化

转载 作者:太空狗 更新时间:2023-10-29 20:50:15 25 4
gpt4 key购买 nike

假设我们有一个 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构造函数,它初始化var1中的成员变量具有 init 值的基类,然后使用 process() 初始化 ab 成员变量> 函数,这取决于设置为 var1 的值。

请注意,为了使此代码正确,我们需要确保 Base(init)a(process())b(过程()).

在 C++ 中假设上述初始化顺序将保持不变是否有效?或者我是否需要将 Derived 构造函数更改为以下内容以保证初始化顺序?

Derived(int init) : Base(init) {

a = process();
b = process();
}

最佳答案

顺序是有保证的,你什么都不用做。基在成员之前初始化(按照它们声明的顺序)。成员按照声明的顺序初始化 [class.base.init]/13 (注意:声明的顺序,不是 mem-initializers 在构造函数的初始化列表中出现的顺序!)。

您还可以依赖于以与初始化顺序完全相反的顺序销毁基础和成员......

关于c++ - 基类和派生类中类成员变量的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55624077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com