類的const和非const成員函式的過載
只要了解過c++的操作符過載的語法,很快就可以寫出下面這個操作符過載函式:
char& operator(int posion) // function_1
;注意,這裡該函式的返回值為乙個引用,否則str[0] = 'c'這樣的語句就會不合法,因為str[0]將是乙個左值。
那麼,是否提供這樣乙個function_1就足夠了呢?看下面這段**:
很顯然,我們必須還要為const string提供乙個const版本的opeartor。如下:
char& operator(int posion)const
這樣,當使用const的string物件使用操作符時,便會呼叫該const的過載版本。
但是,這樣就ok了嘛?雖然上面的那段**沒有問題了,但是其中卻隱藏了乙個陷阱,看如下**:
const string str = "she";
str[0] = 't';
上面這段**可以編譯,執行通過,str變為了"the"!而str宣告為const的!!
現在,你應該知道了,對於const的該操作符過載函式其返回值也應該是const的,否則就會出現可以通過其修改const物件的漏洞。修改如下:
constchar& operator(int posion) const
好了,現在沒有問題了!
我們再回過頭來看一下,為了給string提供乙個操作符來讀寫指定位置的字元,需要提供如下兩個函式,以分別對非const string物件和const string物件提供支援:
char& operator(int posion);
const char& operator(int posion)const
類的const和非const成員函式的過載
類的const和非const成員函式的過載 只要了解過c 的操作符過載的語法,很快就可以寫出下面這個操作符過載函式 char operator int posion function 1 注意,這裡該函式的返回值為乙個引用,否則str 0 c 這樣的語句就會不合法,因為str 0 將是乙個左值。那麼...
const 和 非const函式過載
在下面的 中a1呼叫const版本,a2呼叫非const版本。const a a1 a a2 a1.x a2.x 後面加const表示在該函式中不能對類的資料成員進行改變,比如 class a 這可以 int x const 當然有特殊情況,就是用mutable關鍵字修飾過的成員變數可以在宣告為co...
引用 const引用和非const引用
引用構造了物件的乙個同義詞,是c 物件的另乙個名字。在實際程式中,引用的主要作用是作函式的形參。引用是一種復合型別1,它通過在變數名前新增 來定義。在使用引用的情況下,每一種引用型別都關聯到某一其他型別。c 不能定義引用型別的引用,但是可以定義任何其他型別的引用。int a 100 int refa...