1.類成員函式定義為const成員函式
——const物件只能訪問const成員函式。因為:當乙個物件呼叫自己的成員函式時,是通過預設繫結的this指標來訪問物件的。問題來了:對於普通的物件,不論是const成員函式還是非const成員函式,都可以訪問!但是對於const物件,當呼叫非const成員函式時,預設是不能改變的,但是非const成員函式呼叫過程中是可能改變物件值的,所以,為了安全起見,針對非const成員函式的呼叫,只能全部禁止!
——令乙個問題,非const物件呼叫const成員函式不會出現問題麼?答案是不會,這裡涉及到以前提到的兩層const(頂層const和底層const),const成員函式是底層const,呼叫過程中僅僅繫結this指標不會指向其他物件,但是針對該物件的修改是可以接受的!
——案例說明:例如宣告且定義乙個類
class test
test a;
const test b;
當a呼叫成員函式時,預設是:test( test * const this ) ;//這裡就可以改變a的成員,只是this指標不能指向其他物件而已。
而當b呼叫成員函式時,預設是:test( const test* const this ); //這裡要求不能改變b的成員,因此必須強制限制!this不僅不能指向其他物件,而且不能改變值!
2.建構函式不能為const型別
——簡單:const型別的目的就是為了不能修改物件的值,如果宣告為const型別,則物件就無法初始化了!
——另外,還引申出另乙個問題,為什麼const常量值可以初始化?!針對量和函式採用不同的策略?!
3.const修飾符問題
——以成員函式isbn()為例,如果與之類似的函式(返回不修改的物件的成員),後面要就const修飾符),因為:以函式add()及combine()為例,引數是const物件,那麼當該物件呼叫isbn()函式時,如果是isbn()沒有const修飾符,那麼該物件就不能呼叫isbn()函式
C 學習基礎知識總結
結束當前視窗 close 字元擷取 string get year get sfz.substring 6,4 當前時間年份 datetime.now.year 型別轉換 convert.toint32 year textbox3.text convert.tostring i1 i2 判斷輸入是否...
c 基礎知識總結
建構函式 1.建構函式沒有返回值,函式名就是類名 2.建構函式可以過載,以滿足對物件不同引數的需求。實參決定了呼叫哪個建構函式 3.建構函式在定義物件的時候由系統自動呼叫。且每個物件只呼叫一次。4.無參建構函式和全預設建構函式都是預設建構函式,且這倆只能存在乙個 二義性問題 5.建構函式不可以用co...
C 中基礎知識
1 讀入未知數目的輸入 不知道具體有多少數值,只是要一直讀數直到程式輸入結束。使用的程式有 while std cin value sum value 2 寫有引數的函式時,首要工作,就是要對傳進來的所有引數進行合法性檢查。而對於傳出的引數也應該進行檢查,這個動作當然應該在函式的外部,也就是說,呼叫...