當一個非靜態的成員是常量或是引用類型時,須要怎麼樣初始化它們

const int a ;//此句代碼是錯誤的,由於const修飾的a必需要在定義的時候初始化。ios

int &a;//同理,也是錯的,在定義的時候必需要初始化,其餘類型的數據也是同樣。函數

那麼若是一個類的成員有非靜態const類型,或者引用類型時,該怎麼初始化呢?spa

#include<iostream>
using namespace std;
class A {
  public:
 const int a;
  A (int t){
    a=t;
   }
};
int main(){
  A b(3);//error,由於調用構造函數A(int t)時,至關於把t賦值給常量a,這是不容許的。編譯器報錯: "錯誤:向只讀成員‘A::a’賦值";對象

  cout<<b.a<<endl;
  return 0;
}

由於A類中有const int a只讀成員,因此在定義一個A類的對象時,必需要初始化對象中的只讀成員。編譯器

那麼咱們只有修改構造函數了io

A (int t){
    a=t;
   }修改爲:編譯

A(int t):a(t){}這裏用初始化取代了賦值;編譯可以經過。class

 

普通的成員變量也能夠進行這種初始化 stream

成員名(表達式)變量

可是const只讀類型以及引用類型必須用這種成員名(表達式)初始化。

 

對於引用類型,同const類型同樣的道理,這裏就不予討論了。

相關文章
相關標籤/搜索