類的const和非const成員函式的過載

2021-04-13 12:28:26 字數 924 閱讀 9031

類的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...