過載操作符:
一、限制:
1、不能增加新的操作符;
2、有些操作符不能過載,如.(物件中的訪問成員)、::(作用域解析操作符)、sizeof、?:(三元操作符);
3、不能改變操作符的元數,元數是指與操作符相關的引數或運算元個數。比如一元操作符++只能應用於乙個操作符;
4、不能改變操作符的優先順序;
5、不能重新定義內建型別的操作符。可以過載的操作符必須是類中的乙個方法,或者至少乙個全域性過載操作符函式的某個引數時乙個使用者自定義型別。
二、操作符過載中的選擇
過載操作符時要編寫乙個形如 operatorx的函式或方法,x為過載的操作符。
過載操作符時必須確定你的操作符是要作為你類的乙個方法還是作為乙個全域性函式(通常是這個類的乙個有員函式),如果作為乙個類的方法。該操作符的左邊必須是此類的乙個物件,如果是全域性函式,左邊可以是另外型別的物件。
存在三種不同型別的操作符:
1、必須是方法的操作符。c++要求有些操作符必須是類的方法,因為在類之外這些操作符就沒有意義,如operator=就與類緊密聯絡。
2、必須是全域性函式的操作符。如果需要讓操作符左邊的操作符是另外型別的變數,就必須讓該操作符作為乙個全域性函式。比如operator《和operator>>,其左運算元是乙個iostream物件,而不是類的物件。
3、既可以是方法也可以是全域性函式的操作符。有乙個原則,盡量讓每個操作符都作為乙個方法,這個原則的優點在於,方法可以是虛方法(virtual),但有元函式不能為虛的。
不應過載的操作符:
可以過載但不建議過載的操作符,如operator&、operator&&和operator||(不能保證短路計算原則)、operator, (逗號操作符)。
三、過載自增和自減
c++採用乙個技巧用來區分過載的版本是字首版本還是字尾版本,字尾版本需要乙個型別為int的引數(但這引數沒用)。
class a
public:
a& operator++(); //字首
const a operator++(int); //字尾
c++標準指定自增和自減的字首版本必須返回乙個左值 ,因此他們不能返回const值,字首形式的返回值與運算元的最後值相同,因此可以返回此物件的引用;而字尾版本返回值與運算元的最後值不同,因此不能返回引用。
for (vector::iterator it =doublevector.begin();it != doublevector.end();++it)
應該盡可能使用先自增而不是後自增,因為先自增往往更高效,it++必須返回乙個新的迭代器物件,而++it可以只返回物件的乙個引用。
C 操作符過載
1.作為成員過載 class myclass public myclass operator const myclass d cons friend myclass operator const myclass a1,const myclass a2 關於返回值型別的討論 呼叫者堆疊裡返回乙個物件效...
C 過載操作符
過載操作符 一 過載操作符的定義 1.過載操作符的結構 返回型別 operator 需要過載的操作符 形參列表 注意 形引數目應和運算元數目相同。2.過載操作符的幾條注意事項 1 過載的操作符名不能通過連線其他合法符號來建立任何新的操作符。如 2 過載操作符必須具備至少乙個類型別或列舉型別的運算元。...
C 操作符過載
最近看了操作符過載,c primer 中提到許多,但是我看完之後沒啥特別的印象,所以整理一下。1 不能過載的操作符 2過載操作符必須具有乙個類型別的運算元 3優先順序及結合性是固定的 4作為類成員的過載函式,其形參比運算元少1,是因為有乙個隱含的this參,限定為第乙個運算元 5當過載函式作為非成員...