運算子過載,const成員函式

2021-09-12 20:53:13 字數 2083 閱讀 5735

1.運算子過載

c++為了增強**的可讀性引入了運算子過載,運算子過載是具有特殊函式名的函式,也具有其返回值類 型,函式名字以及引數列表,其返回值型別與引數列表與普通的函式類似。

乙個賦值運算子過載的例子:

#include#includeusing namespace std;

class mystr

mystr(int _id, char *_name) //constructor

mystr(const mystr& str)

mystr& operator =(const mystr& str)//賦值運算子

return *this;

}~mystr()

};int main()

引數:一般的運算子過載函式引數是所在類的const型別的引用,用引用是因為可以避免在函式呼叫時對實參的一次拷貝。加const是因為我們不希望在這個函式中對用來進行賦值的「原版」做任何修改。加上const,對於const的和非const的實參,函式就能接受;如果不加,就只能接受非const的實參。

返回值:一般返回被賦值物件的引用,也就是*this,這樣可以避免返回時的一次拷貝,提高了效率。

呼叫時機:在用已經建立的物件進行複製時就會呼叫如上面**所示mystr str2;

str2 = str1;

當程式沒有顯式地提供乙個以本類或本類的引用為引數的賦值運算子過載函式時,編譯器會自動生成這樣乙個賦值運算子過載函式。

賦值運算子過載函式只能是類的非靜態的成員函式

c++規定,賦值運算子過載函式只能是類的非靜態的成員函式,不能是靜態成員函式,也不能是友元函式。其實,之所以不是靜態成員函式,是因為靜態成員函式只能操作類的靜態成員,不能操作非靜態成員。如果我們將賦值運算子過載函式定義為靜態成員函式,那麼,該函式將無法操作類的非靜態成員,這顯然是不可行的。

注釋:複製運算子過載函式不能被過載,這個以後再說。

const成員函式:在成員函式後加const,const修飾this指標指向的物件,這也就保證呼叫這個const成員函式的物件在內部不會被改變。

如果要宣告乙個const型別的類成員函式,只需要在成員函式列表後加上關鍵字const, 例如:

class screen ;
在類體之外定義const成員函式時,還必須加上const關鍵字,例如:

char screen :: get() const
若將成員函式宣告為const,則不允許通過其修改類的資料成員。 值得注意的是,如果類中存在指標型別的資料成員即便是const函式只能保證不修改該指標的值,並不能保證不修改指標指向的物件。例如:

class name ;

void setname(const string &s) const

const成員函式可以被對應的具有相同形參列表的非const成員函式過載,

例如:

class screen ;

int main()

const成員函式可以訪問非const物件的非const資料成員,const資料成員,也可以訪問const物件內的所有資料成員;

非const成員函式只可以訪問非const物件的任意的資料成員(不能訪問const物件的任意資料成員)

總結:1)const成員函式可以訪問非const物件的非const資料成員、const資料成員,也可以訪問const物件內的所有資料成員;

2)非const成員函式可以訪問非const物件的非const資料成員、const資料成員,但不可以訪問const物件的任意資料成員;

3)作為一種良好的程式設計風格,在宣告乙個成員函式時,若該成員函式並不對資料成員進行修改操作,應盡可能將該成員函式宣告為const 成員函式。

4)如果只有const成員函式,非const物件是可以呼叫const成員函式的。當const版本和非const版本的成員函式同時出現時,非const物件呼叫非const成員函式。

運算子過載 成員函式

檔名稱 test.cpp 完成日期 2016年5月14日 問題描述 請用類的成員函式,定義複數類過載運算子 使之能用於複數的加減乘 include using namespace std class complex complex double r,double i complex operator...

C 運算子過載函式之成員運算子過載函式

5.2.3 成員運算子過載函式 在c 中可以把運算子過載函式定義為某個類的成員函式,稱之為成員運算子過載函式。1.定義成員運算子過載函式的語法形式 1 在類的內部,定義成員運算子過載函式的格式如下 函式型別 operator 運算子 形參表 2 成員運算子過載函式也可以在類中宣告成員函式的原型,在類...

成員函式過載算數運算子「 」

include using namespace std class complex void display complex operator complex c private double real,imag complex complex operator complex c intmain ...