類的成員變數的初始化順序
類的成員變數的初始化順序只與變數在類中的宣告順序有關,與在建構函式中的初始化列表順序無關。
- 注意:是與宣告順序有關。
#include<iostream>
using namespace std;
class A {
public:
//我們原意是先初始化b,再用b初始化a。
//但結果可以看出,類的成員變數的初始化順序與宣告順序有關,先初始化的a,再初始化的b。
A(int val):b(val),a(b){}
public:
int a;
int b;
};
int main(int argc, char* argv[]) {
A A1(10);
cout << A1.a << endl;
cout << A1.b << endl;
getchar();
return 0;
}
靜態成員變數先於例項變數,父類成員變數先於子類成員變數,父類建構函式先於子類建構函式。
從全域性看,變數的初始化順序如下(重要!!!):
- 基類的靜態變數或全域性變數。
- 派生類的靜態變數或全域性變數。
- 基類的成員變數。
- 派生類的成員變數。
擴充套件:初始化列表和建構函式初始化的區別
- 初始化列表一般為:
A1(int a):a(a){}
- 建構函式初始化一般為:
A1(int a) {
this->a = a;
}
很多場合必須使用帶有初始化列表的建構函式。例如,const成員或引用型別的成員,因為const物件或者引用型別只能初始化,不能對他們賦值。(重要!!!)
正確
class A1 {
A1(int a,int val):a(a),b(val) {}
private:
const int a;
int& b;
};
- 錯誤
class A1 {
A1(int a,int val) {
this->a=a;
b=val;
}
private:
const int a;
int& b;
};
相關文章
- 類成員變數的初始化變數
- 淺談Java類中的變數初始化順序Java變數
- C++類的靜態成員變數初始化C++變數
- java類初始化的順序Java
- 12-成員變數的初始化變數
- Java初始化靜態變數的時間順序Java變數
- Java中變數之區域性變數、本類成員變數、父類成員變數的訪問方法Java變數
- c++成員變數初始化C++變數
- Java子類和父類的初始化執行順序Java
- Python中類變數、成員變數、區域性變數的區別Python變數
- 子父類中成員變數變數
- 類的靜態成員變數和普通成員變數該怎樣去區別定義變數
- 總結類初始化時的程式碼執行順序
- Java static變數、作用域、建構函式初始化順序Java變數函式
- JVM類載入機制與類初始化順序JVM
- Java中class的初始化順序Java
- 成員變數變數
- Java 通過反射獲取類的資訊(成員變數,成員方法,構造方法)Java反射變數構造方法
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- 九、 Java程式初始化的順序(二)Java
- ansible 變數優先順序示例變數
- 類,物件,成員變數和區域性變數,匿名物件物件變數
- js函式和變數的執行順序【易錯】JS函式變數
- 成員變數和區域性變數變數
- 類的例項化順序和分析
- cosnt成員資料的初始化
- C# 建構函式 (初始化成員變數的角色)C#函式變數
- 12 ### 各種成員變數變數
- 【python】類的特殊成員Python
- c++語言中類的私有型別或保護型別成員變數C++型別變數
- gson改變輸出欄位的順序
- C#類中方法的執行順序C#
- Java中,類與類,類中的程式碼執行順序Java
- 程式碼說事 之 建立java物件的初始化順序Java物件
- C++學習筆記(三):類與物件--靜態成員變數與常成員函式C++筆記物件變數函式
- C/C++多引數函式引數的計算順序與壓棧順序C++函式
- C++類內成員變數可以定義引用型別嗎C++變數型別
- 18、繼承以及繼承中成員變數和成員方法的重名問題繼承變數