c++的一大特性就是過載(overload),通過過載可以把功能相似的幾個函式合為乙個,使得程式更加簡潔、高效。在c++中不止函式可以過載,運算子也可以過載。由於一般資料型別間的運算子沒有過載的必要,所以運算子過載主要是物件導向之間的。
在進行物件之間的運算時,程式會呼叫與運算子相對應的函式進行處理,所以運算子過載有兩種方式:成員函式和友元函式。成員函式的形式比較簡單,就是在類裡面定義了乙個與操作符相關的函式。友元函式因為沒有this指標,所以形參會多乙個。
class a
a operator+(a&);//成員函式
a operator-(a&);
a operator*(a&);
a operator/(a&);
a operator%(a&);
friend a operator+(a&,a&);//友元函式
friend a operator-(a&,a&);
friend a operator*(a&,a&);
friend a operator/(a&,a&);
friend a operator%(a&,a&);
private:
int data;
};
//成員函式的形式
a a::operator+(a &a)
a a::operator-(a &a)
a a::operator*(a &a)
a a::operator/(a &a)
a a::operator%(a &a)
//友元函式的形式
a operator+(a &a1,a &a2)
a operator-(a &a1,a &a2)
a operator*(a &a1,a &a2)
a operator/(a &a1,a &a2)
a operator%(a &a1,a &a2)
//然後我們就可以對類的物件進行+、-、*、/了。
void main(void)
注意:在進行a2+a3的時候會出錯,因為我們在上面對+定義了兩種方法,去掉一種即可。
因為函式體比較簡單,後面我就只給出成員函式形式的函式宣告了,關係運算子有==,!=,<,>,<=,>=。
bool operator == (const a& );
bool operator != (const a& );
bool operator < (const a& );
bool operator <= (const a& );
bool operator > (const a& );
bool operator >= (const a& );
bool operator || (const a& );
bool operator && (const a& );
bool operator ! ();
這裡的+、-是正負的意思,放在物件前面。
a& operator + ();
a& operator - ();
a* operator & ();
a& operator * ();
++和–根據位置的不同有四種情況,都可以過載。
a& operator ++ ();//前置++
a operator ++ (int);//後置++
a& operator --();//前置--
a operator -- (int);//後置--
按位操作。
a operator | (const a& );
a operator & (const a& );
a operator ^ (const a& );
a operator << (int i);
a operator >> (int i);
a operator ~ ();
沒有=哦。
a& operator += (const a& );
a& operator -= (const a& );
a& operator *= (const a& );
a& operator /= (const a& );
a& operator %= (const a& );
a& operator &= (const a& );
a& operator |= (const a& );
a& operator ^= (const a& );
a& operator <<= (int i);
a& operator >>= (int i);
void *operator new(size_t size);
void *operator new(size_t size, int i);
void *operator new(size_t size);
void operator delete(void*p);
void operator delete(void*p, int i, int j);
void operator delete (void* p);
上面的運算子過載都有兩種方式,而下面的運算子只能用一種,特殊吧。 這些運算子的過載只能是成員函式。
a& operator = (const a& );
char operator (int i);//返回值不能作為左值
const char* operator () ();
t operator -> ();
//型別轉換符
operator char* () const;
operator int ();
operator const char () const;
operator short int () const;
operator long long () const;
//還有很多就不寫了
而這些只能以友元函式的形式過載
friend inline ostream &operator << (ostream&, a&);//輸出流
friend inline istream &operator >> (istream&, a&);//輸入流
兩種過載方式的比較:
注意事項:
除了類屬關係運算子」.「、成員指標運算子」.*「、作用域運算子」::「、sizeof運算子和三目運算子」?:「以外,c++中的所有運算子都可以過載。
過載運算子限制在c++語言中已有的運算子範圍內的允許過載的運算子之中,不能建立新的運算子。
運算子過載實質上是函式過載,因此編譯程式對運算子過載的選擇,遵循函式過載的選擇原則。
過載之後的運算子不能改變運算子的優先順序和結合性,也不能改變運算子運算元的個數及語法結構。
運算子過載不能改變該運算子用於內部型別物件的含義。它只能和使用者自定義型別的物件一起使用,或者用於使用者自定義型別的物件和內部型別的物件混合使用時。
運算子過載是針對新型別資料的實際需要對原有運算子進行的適當的改造,過載的功能應當與原有功能相類似,避免沒有目的地使用過載運算子。
c 運算子過載總結
目錄 1.一般運算子過載 2.關係運算子過載 3.邏輯運算子過載 4.單目運算子過載 5.自增減運算子過載 6.位運算子過載 7.賦值運算子過載 8.記憶體運算子過載 9.特殊運算子過載 10.總結c 的一大特性就是過載 overload 通過過載可以把功能相似的幾個函式合為乙個,使得程式更加簡潔 ...
C 運算子過載總結
c 的一大特性就是過載 overload 通過過載可以把功能相似的幾個函式合為乙個,使得程式更加簡潔 高效。在c 中不止函式可以過載,運算子也可以過載。由於一般資料型別間的運算子沒有過載的必要,所以運算子過載主要是物件導向之間的。1.一般運算子過載 在進行物件之間的運算時,程式會呼叫與運算子相對應的...
C 運算子過載總結
c 的一大特性就是過載 overload 通過過載可以把功能相似的幾個函式合為乙個,使得程式更加簡潔 高效。在c 中不止函式可以過載,運算子也可以過載。由於一般資料型別間的運算子沒有過載的必要,所以運算子過載主要是物件導向之間的。在進行物件之間的運算時,程式會呼叫與運算子相對應的函式進行處理,所以運...