c類中物件的引用

時間 2021-08-30 10:37:16

1樓:公尺果的媽媽

引用引入了物件的乙個同義詞。定義引用的表示方法與定義指標相似,只是用&代替了*。引用(reference)是c++對c語言的重要擴充。

引用就是某一變數(目標)的乙個別名,對引用的操作與對變數直接操作完全一樣。引用的宣告方法:型別識別符號 &引用名=目標變數名;

引用說明:

(1)&在此不是求位址運算,而是起標識作用。

(2)型別識別符號是指目標變數的型別。

(3)宣告引用時,必須同時對其進行初始化。

(4)引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。

int a=2,int &ra=a;

a為目標原名稱,ra為目標引用名。給ra賦值:ra=1; 等價於 a=1;

(5)對引用求位址,就是對目標變數求位址。&ra與&a相等。即我們常說引用名是目標變數名的乙個別名。

別名一詞好像是說引用不佔據任何記憶體空間。但是編譯器在一般將其實現為const指標,即指向位置不可變的指標。即引用實際上與一般指標同樣占用記憶體。

(6)不能建立引用的陣列。因為陣列是乙個由若干個元素所組成的集合,所以無法建立乙個由引用組成的集合。但是可以建立陣列的引用.

例如: int& ref [3]= ;//宣告ref引用的陣列錯誤

但是可以這樣寫:

const int (&ref)[3] =; //gcc編譯的時候加上選項 -std=c++0x

ref[0] = 35; //錯誤

為什麼要加上const ,因為此時是個字面值陣列,是儲存在**段裡,唯讀的屬性,如果不加,編譯錯誤,而且後面對ref[0]的賦值也不會成功.

需要特別強調的是引用並不產生物件的副本,僅僅是物件的同義詞。因此,當下面的語句執行後:

pt1.offset(12,12);

pt1和pt2都具有(12,12)的值。

引用必須在定義時馬上被初始化,因為它必須是某個東西的同義詞。你不能先定義乙個引用後才

初始化它。例如下面語句是非法的:

point &pt3;

pt3=pt1;

那麼既然引用只是某個東西的同義詞,它有什麼用途呢?

下面討論引用的兩個主要用途:作為函式引數以及從函式中返回左值。

2樓:野林古風

這行**的意思是:建立乙個名叫topval的函式,該函式返回值是乙個const型別的stock的物件,引用的引數也是const 的,並且該函式 也是const 型別的,在程式執行過程中任何對返回值,或引數作出修改都不會通過。

這個主要是讓你了解const的用法,如果乙個引數被標定為const 則任何函式對他的修改都會引起乙個編譯錯誤

const 物件只能通過const 的函式訪問;

你看deitel的教程,對類似這個函式的用法有詳細的解釋

3樓:匿名使用者

& 的語法意義根據位置的不同而有差別

在函式原型宣告裡面 & 是指這個變數是引用傳遞的在變數宣告裡面 & 的意思是宣告乙個別名

在其它語句裡面 & 的意思是取位址

這裡是第一種情況, 就是指引用傳遞, 也沒更多可解釋的, 關鍵是不要跟其他的搞混了

4樓:匿名使用者

這本書的255頁有關於這個的講解

c++,在類中定義乙個資料成員 類名 &x 這樣的引用,是不是x代表這個類建立的物件的引用

5樓:匿名使用者

自己對自己的引用?這樣的類恐怕不能定義出來

6樓:匿名使用者

可以的,這其實就是變數作用域的範疇。b中定義區域性變數c,這時候直接使用c就是本地新定義的c,如果要用類的成員變數c要加作用域。

c++如何在乙個類中引用另乙個類的變數

7樓:匿名使用者

在第二個類中例項化第乙個類,在通過例項化後的類的函式(一般是get之類的函式)來引用!

看看這個方法行不行~

8樓:

如果是兩個孤立的類,最好不要這麼做,乙個類需要用到的資料,最好是從另外乙個類公開的介面來獲取。直接引用另外乙個類的變數,會破壞資料的封裝性,會有麻煩的。

如果是派生類要引用基類的資料,只要資料不是私有,直接引用就可以。

9樓:匿名使用者

可能你理解上有問題。

不太明白你的意思,所以我分開解釋。

如果是在定義的時候就引用,下面兩種。

1.兩個都是類,即類的靜態變數(static修飾),乙個類自然可以引用靜態變數,因為靜態變數是在程式進入main函式前就已經初始化完了。

2.乙個類a乙個例項b(a類產生的物件),a當然無法在類的內部引用(即定義中),因為例項是在程式中動態分配的記憶體,類a必然先於例項b存在,所以a並不能知道b的存在。b可以引用類a的靜態變數,理由同1。

如果是在執行時才引用。

你只要在類a裡寫乙個函式,例如function(b b),這樣你要呼叫的時候通過這個函式做介面就行了,至於b你要做什麼,就是你的事了。

10樓:

乙個類中定義乙個指向另乙個類的變數的指標不行嗎?

11樓:du瓶邪

可以這樣做:

class a

;class b;};

c++怎麼才能在乙個類裡面新增另乙個類的引用,使得可以從類a的例項a.b得到類b的例項?

12樓:匿名使用者

引用在定義時就必須要初始化,對於類的引用成員,只能在初始化列表裡面初始化引用成員。

但是在a類中定義對b類物件的引用似乎不是什麼好的方式,因為如果b類物件的生命週期比a類物件要短的話,那麼b類物件中的引用成員就失效了,有點類似於野指標的效果。

比如class a

;class b

//這裡lkjhggv的定義有乙個問題,不能用const a& 來初始化非const的引用成員

};a * pa = new a;

b b(*pa);

delete pa; //後面b.ref_a已經失效

c語言中,這種需求實際上是通過指標現實的,c++中這樣的需求最完美的解決方案還是智慧型指標,比如stl的 std::shared_ptr

13樓:匿名使用者

定義引用成員,不過在構造時,必須初始化引用成員

C 如何在類中引用另類的變數,C 如何在一個類中引用另一個類的變數

在第二個類中例項化第一個類,在通過例項化後的類的函式 一般是get之類的函式 來引用!看看這個方法行不行 如果是兩個孤立的類,最好不要這麼做,一個類需要用到的資料,最好是從另外一個類公開的介面來獲取。直接引用另外一個類的變數,會破壞資料的封裝性,會有麻煩的。如果是派生類要引用基類的資料,只要資料不是...

C 中的“類”是什麼意思,c 中的類和類的物件是什麼意思

光棍誓言 類就是就是有類似屬性的集合。舉個例子。就像是學生類是吧。這個類就可以定義許多有一定屬性的學生。就像身高,體重什麼的。因為這都是學生的屬性。不過0基礎的話,還是先學c,學會結構體。接著學c 過渡到類。真的,零基礎直接殺c 是吃力的。 令狐蛋蛋 相當於一個集合,型別。這個集體有共同的特徵,比如...

C 未將物件引用設定到物件的例項。

正確的寫法是 string connectionstring membership connectionstring sqlconnection con new sqlconnection connectionstring sqlcommand cmd new sqlcommand delete m...