C++類成員變數的初始化方法)

來源:互聯網
上載者:User

關於這個問題是引起來源於一則面試問題:引用型成員變數如何初始化?

回答的不是很確定,於是對這個問題研究一下。

1、普通的變數:一般不考慮啥效率的情況下 可以在建構函式中進行賦值。考慮一下效率的可以再建構函式的初始化列表中進行。

class CA
{
public:
 int data;
 ……
public:
 CA();
 ……

};

CA::CA():data(0)//……#1……初始化列表方式
{
 //data = 0;//……#1……賦值方式
};

2、static 靜態變數:

static變數屬於類所有,而不屬於類的對象,因此不管類被執行個體化了多少個對象,該變數都只有一個。在這種性質上理解,有點類似於全域變數的唯一性。

class CA
{
public:
 static int sum;
 ……
public:
 CA();
 ……

};

int CA::sum=0;//……#2……類外進行初始化

3、const 常量變數:
const常量需要在聲明的時候即初始化。因此需要在變數建立的時候進行初始化。一般採用在建構函式的初始化列表中進行。

class CA
{
public:
 const int max;
 ……
public:
 CA();
 ……
};

CA::CA():max(100)
{
 ……
}

4、Reference 引用型變數:
引用型變數和const變數類似。需要在建立的時候即進行初始化。也是在初始化列表中進行。但需要注意用Reference類型。

class CA
{
public:
 int init;
 int& counter; 
 ……
public:
 CA();
 ……
};

CA::CA():counter(&init)
{
 ……
}

5、const static integral 變數:
對於既是const又是static 而且還是整形變數,C++是給予特權的。可以直接在類的定義中初始化。short可以,但float的不可以哦。
class CA
{
public:
 //static const float fmin = 0.0;// only static const integral data members can be initialized within a class
 const static int nmin = 0;
 ……
public:
 ……

};

總結起來,可以初始化的情況有如下四個地方:
1、在類的定義中進行的,只有const 且 static 且 integral 的變數。
2、在類的建構函式初始化列表中, 包括const對象和Reference對象。
3、在類的定義之外初始化的,包括static變數。因為它是屬於類的唯一變數。
4、普通的變數可以在建構函式的內部,通過賦值方式進行。當然這樣效率不高。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.