作者 : 卿笃軍
1)早在學習C語言的時候,我們就知道,在定義結構體的時候,不能在結構體中定義該結構體類型的變量:
struct node { int a; // struct node b; //錯 struct node *next; //對 };因為,該結構體還在定義中....不知道結構體裡面具體有什麼內容,所以無法定義對象b。但是可以定義指針*next。
2)現在,C++裡面多出來了一個叫引用的東東(很強大):
引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣。引用的聲明方法:類型標識符 &引用名=目標變量名;
但是,需要注意幾點(特別是第3點):
(1)&在此不是求地址運算,而是起標識作用。
(2)類型標識符是指目標變量的類型。
(3)聲明引用時,必須同時對其進行初始化。
(4)引用聲明完畢後,相當於目標變量名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變量名的別名。
int a,&ra=a;
a為目標原名稱,ra為目標引用名。給ra賦值:ra=1; 等價於 a=1;
(5)對引用求地址,就是對目標變量求地址。&ra與&a相等。即我們常說引用名是目標變量名的一個別名。別名一詞好像是說引用不占據任何內存空間。但是編譯器在一般將其實現為const指針,即指向位置不可變的指針。即引用實際上與一般指針同樣占用內存。
(6)不能建立引用的數組。因為數組是一個由若干個元素所組成的集合,所以無法建立一個由引用組成的集合。但是可以建立數組的引用.
3)那麼,定義引用型類成員變量要注意些什麼呢?
第一步:在類B中定義一個引用型A類成員變量 A &m_a1;
第二步:在B類的構造函數中對其進行初始化。
注意:a.因為你使用了引用型成員變量,所以B類不能有空構造函數(代碼中已經將B(){}注釋起來了,不能出現它)。
b.在B類構造函數中初始化的時候,引用型成員變量必須在初始化列表中進行初始化,不能在函數體中進行初始化。
(就是,必須在" : "號後面初始化,不能在函數體 { } 裡面初始化)
4)另外,其它一些需要注意的事項,全部在下面的代碼注釋中進行了說明了。
示例:C++ 定義引用型類成員變量
#includeusing namespace std; class A; //前向引用聲明 class B { public: // B(){} //不能有空構造函數 B(A &a):m_a1(a) {} //構造函數:同時給&m_a1引用初始化 void bPrint1(A &a) { cout<<"B1"<
參考文獻:百度百科,C++引用,http://baike.baidu.com/view/2129184.htm,2014年5月24日tzdjzs的CSDN博客專欄,C++ 類成員引用變量的使用,http://blog.csdn.net/tzdjzs/article/details/2768363,2014年5月24日