關於類名後加
&符號時基類引用派生類的問題
例如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...