操作符的過載有一些規則:
1. 過載操作符必須具有乙個類型別或列舉型別運算元。這條規則強制過載操作符不能重新定義用於內建型別物件的操作符的含義。
如: int operator+(int, int), 不可以
2. 為類設計過載操作符的時候,必須選擇是將操作符設定為類成員還是普通非成員函式。在某些情況下,程式沒有選擇,操作符必須是成員;在另外一些情況下,有些經驗可以指導我們做出決定。下面是一些指導:
a. 賦值(=),下標(),呼叫(())和成員訪問箭頭(->)等操作符必須定義為成員,將這些操作符定義為非成員函式將在編譯時標記為錯誤。
b. 像賦值一樣,復合賦值操作符通常應定義為類的成員。與賦值不同的是,不一定非得這樣做,如果定義為非成員復合賦值操作符,不會出現編譯錯誤。
c. 改變物件狀態或與給定型別緊密聯絡的其他一些操作符,如自增,自減和解引用,通常應定義為類成員。
d 對稱的操作符,如算術操作符,相等操作符,關係操作符和位操作符,最好定義為普通非成員函式。
e io操作符必須定義為非成員函式,過載為類的友元。
例子:
complex0.h
#ifndef complex0_h_
#define complex0_h_
#includeclass complex
;#endif
complex0.cpp
#include#include"complex0.h"
using namespace std;
complex::complex()
complex::complex(double a,double b)
complex complex::operator+(complex &c) const
complex complex::operator-(complex &c) const
complex complex::operator*(complex &c) const
complex operator*(double n,complex &c)
complex complex::operator~()
std::ostream & operator<<(std::ostream &os,const complex &c)
complex.cpp
#includeusing namespace std;
#include"complex0.h"
int main()
{ complex a(3.0,4.0);
complex c;
cout<<"enter a complex number (q to quit):\n";
while(cin>>c)
{cout<<"c is "<
輸入和輸出運算子過載
過載輸出運算子 通常情況下,輸出運算子的第乙個形參是乙個非常量 ostream 物件的引用。之所以 ostream 是非常量是因為向流寫入內容會改變其狀態 而該形參是引用是因為我們無法直接複製乙個 ostream 物件。第二個形參一般來說是乙個常量的引用,該常量是我們想要列印的類型別。為了與其他輸出...
C 運算子過載 輸入 輸出運算子
為了與io標準庫一致,過載輸入輸出運算子函式的第乙個行參應該是流的引用,第二個行參是物件的引用。如果過載為類的成員函式,第乙個行參應該是物件的引用,第二個行參是流的引用。使用方式是 classobj cout 這樣與標準io庫就不一致了,所以輸入輸出運算子不能過載為類的成員函式,可以過載為類的友元函...
C 運算子過載 輸入 輸出運算子
為了與io標準庫一致,過載輸入輸出運算子函式的第乙個行參應該是流的引用,第二個行參是物件的引用。如果過載為類的成員函式,第乙個行參應該是物件的引用,第二個行參是流的引用。使用方式是 classobj cout 這樣與標準io庫就不一致了,所以輸入輸出運算子不能過載為類的成員函式,可以過載為類的友元函...