类成员变量初始化
类成员变量初始化
首先看如下代码
#include<iostream>
using namespace std;
class Base {
public:
Base(int a) : variableA(a){}
int variableA;
};
class Derived : public Base {
public:
int variableB;
int variableC;
Derived(int a, int c) : variableC(c),Base(a),variableB(variableA + variableC){
cout << variableA << endl;
cout << variableB << endl;
cout << variableC << endl;
}
};
int main(){
Derived(1,10);
}
上图代码输出的结果为1,1,10
。这是因为类成员变量初始化顺序是按声明顺序排列的并不是按照初始化列表顺序初始化的。所以在这段代码中,varibleA
首先初始化为1
(基类成员变量优于派生类成员变量初始化),然后初始化variableB
,由于此时variableC
还未初始化,被默认初始为0
,所以variableB = 0 + 1 = 1
;最后,variableC初始化为10。
更换以下声明顺序如下
#include<iostream>
using namespace std;
class Base {
public:
Base(int a) : variableA(a){}
int variableA;
};
class Derived : public Base {
public:
int variableC;
int variableB;
Derived(int a, int c) : variableC(c),Base(a),variableB(variableA + variableC){
cout << variableA << endl;
cout << variableB << endl;
cout << variableC << endl;
}
};
int main(){
Derived(1,10);
}
此时由于variableC
先于variableB
初始化,所以输出结果为1, 11, 10
。