關於類名後加 符號時基類引用派生類的問題

2021-07-12 07:20:26 字數 1065 閱讀 2970



關於類名後加

&符號時基類引用派生類的問題

例如class cdata

;cdata& fun(cdata& a,cdata& b)

;這是引用。

指標和引用的宣告方式:

宣告指標:

char*pc;

宣告引用:

char c ='a'

char& rc = c;

它們的區別:

①從現象上看,指標在執行時可以改變其所指向的值,而引用一旦和某個物件繫結後就不再改變。

這句話可以理解為:指標可以被重新賦值以指向另乙個不同的物件。(指標物件可以改變)

但是引用則總是指向在初始化時被指定的物件,以後不能改變,但是指定的物件其內容可以改變。

(注意物件不改變但是物件的內容可以改變)

②從記憶體分配上看,程式為指標變數分配記憶體區域,而不為引用分配記憶體區域,

因為引用宣告時必須初始化,從而指向乙個已經存在的物件。引用不能指向空值。

③從編譯上看,程式在編譯時分別將指標和引用新增到符號表上,符號表上記錄的是變數名及變數所對應位址。

指標變數在符號表上對應的位址值為指標變數的位址值

(變成了指標本身自己的位址值),

而引用在符號表上對應的位址值為引用物件的位址值。

符號表生成後就不會再改,因此指標可以改變指向的物件(指標變數中的值可以改),而引用物件不能改。

這是使用指標不安全而使用引用安全的主要原因。從某種意義上來說引用可以被認為是不能改變的指標。

④不存在指向空值的引用這個事實意味著使用引用的**效率比使用指標的要高。

因為在使用引用之前不需要測試它的合法性。相反,指標則應該總是被測試,防止其為空。

⑤理論上,對於指標的級數沒有限制,但是引用只能是一級。如下:

int** p1; //

合法。指向指標的指標

int*&p2; //

合法。指向指標的引用

int&* p3; //

非法。指向引用的指標是非法的

int&& p4; //

非法。指向引用的引用是非法的

注意上述讀法是從左到右。

關於基類指標 派生類指標 基類物件派 生類物件問題

1 基類指向派生類的指標 2 派生類指向基類的指標 3 以及將派生類指標強制轉換為基類指標 4 將基類指標強制轉換為派生類指標 無論是基類指向派生類還是派生類指向基類,重點就是哪個類的指標就呼叫哪個類的方法,而輸出的是指標指向的物件。基類指向派生類的指標即將派生類物件賦給基類指標,如果輸出的話,呼叫...

針對基類引用符指向派生類物件引起的思考

針對 扣響c 之門 書中第九章中引出的虛方法繼承使用,產生了很多疑問 感謝該書能激發讀者的深思,剛開始學其他書時想都不會去想這些問題 關於這部分內容的確值得深入,先對基類引用符指向派生類物件引起的思考進行分析 1 當派生類繼承基類時,實際上是將基類所有成員全部繼承下來 除了sealed宣告的密封函式...

new物件時,類名後加括號與不加括號的區別

預設建構函式 關於預設建構函式,請參見隨筆 類中函式 請看測試 1 include 2 using namespace std 34 空類 5class empty6 89 乙個預設建構函式,乙個自定義建構函式 10class base11 18 base int nvalue 19 2324 pr...