C 小知識點 下標運算子 的過載

2021-10-23 23:23:14 字數 1020 閱讀 5478

下標運算子的過載有兩種形式:

形式1:int& operator (int index);// 從外部可更改陣列元素

形式2:const int& operator (int index) const;// 僅供元素的讀寫使用

對於形式1來說,其返回值是非const的,所以可以從外部通過下標操作符來更改陣列的值,即如下語句是合法的:

array arr(10

);//定義乙個非const物件

arr[5]

=7;//更改有效;相當於arr.operator(5)=7,呼叫形式1,因為返回值是非const的,故可以作為左值

int var = arr[3]

;//訪問

對於形式2來說,有兩點需要注意:

1)返回值是const的,所以從外部只能通過訪問陣列元素,但不能從外部通過來修改陣列的值:

const  array brr(6

);brr[5]

=7;//非法;相當於brr.operator(5)=7,呼叫形式2,因為此時返回值是非const的,故可以作為左值

int var = brr[3]

;//訪問

2)const物件只能呼叫const成員函式。

這就是明明arr[3]和 brr[3]看起來一樣但實質呼叫的過載函式不一樣,所以返回值型別也不一樣,從而操作結果不一樣的原因!!!

擴:非const物件可以呼叫非const成員函式,也可以呼叫const成員函式。(所以為什麼arr沒有呼叫形式2呢?我也不知道)

換言之:

非const成員函式只能處理非const物件; const成員函式可以處理const物件,也可以處理非const物件。

定義形式1、形式2兩種過載函式的好處是,這樣可以定義元素寫入,讀取使用不同的方式。編譯器將在讀取類物件時呼叫const函式,而在對類物件執行寫入操作時呼叫非const函式。因此,如果願意,可在兩個下標函式中實現不同的功能。

c 運算子過載 常用運算子 知識點

先給出一段 具體函式內容會在下面給出 class person bool operator person p 過載 bool operator person p 過載 person operator 前置 過載 person operator int 後置 過載 friend ostream ope...

C 關於運算子過載知識點

1 除了類屬關係運算子 成員指標運算子 作用域運算子 sizeof運算子和三目運算子 以外,c 中的所有運算子都可以過載。2 過載運算子限制在c 語言中已有的運算子範圍內的允許過載的運算子之中,不能建立新的運算子。3 運算子過載實質上是函式過載,因此編譯程式對運算子過載的選擇,遵循函式過載的選擇原則...

C 下標運算子 過載

下標操作符 通常用於訪問陣列元素。過載該運算子用於增強操作 c 陣列的功能。下面的例項演示了如何過載下標運算子 include using namespace std const int size 10 class safearay int operator int i if i size cout...