運算子的過載實際是一種特殊的函式過載,必須定義乙個函式,並告訴c++編譯器,當遇到該過載的運算子時呼叫此函式。這個函式叫做運算子過載函式,通常為類的成員函式。
定義運算子過載函式的一般格式:
返回值型別 類名::operator過載的運算子(參數列)
operator是關鍵字,它與過載的運算子一起構成函式名。因函式名的特殊性,c++編譯器可以將這類函式識別出來。
小結:1. 運算子過載函式的函式名必須為關鍵字operator加乙個合法的運算子。在呼叫該函式時,將右運算元作為函式的實參。
2. 當用類的成員函式實現運算子的過載時,運算子過載函式的引數(當為雙目運算子時)為乙個或(當為單目運算子時)沒有。運算子的左運算元一定是物件,因為過載的運算子是該物件的成員函式,而右運算元是該函式的引數。
3. 單目運算子「++」和「--」存在前置與後置問題。
前置「++」格式為:
返回型別 類名::operator++()
而後置「++」格式為:
返回型別 類名::operator++(int)
後置「++」中的引數int僅用作區分,並無實際意義,可以給乙個變數名,也可以不給變數名。
4. c++中只有極少數的運算子不允許過載。
過載運算子有以下幾種限制
1).不可臆造新的運算子
2).不能改變運算子原有的優先順序、結合性和語法結構,不能改變運算子運算元的個數
3).運算子過載不宜使用過多
4).過載運算子含義必須清楚,不能有二義性
string運算子過載具體**如下:
#include#includeusing namespace std;
class string; //先宣告
ostream& operator<
istream& operator>>(istream &in, string &s); //輸入流
class string //定義string類
else
}string(const string &s) //拷貝建構函式
string& operator=(const string &s) //運算子過載
return *this;
} ~string() //析構函式
string operator+(const string &s) //s = s1 + s2
string operator+=(const string &s) //s1 += s2
char& operator(int index) //過載下標運算子
bool operator==(string &s) //s1 = s2
else
}bool operator!=(string &s) //s1 != s2
else
}bool operator>(string &s) //s1 > s2
else
}bool operator<=(string &s) //s1 <= s2
else
}bool operator
else
}bool operator>=(string &s) //s1 >= s2
else
}private:
char *m_data; //私有成員
};ostream& operator<
void main() //測試函式
{ string s1("hello");
string s2("world");
string s3= s1 + s2;
string s;
s = s1 += s2;
cout
{ cout<
{ cout<
希望大家可以指出我的不足,謝謝大家。
運算子過載 string類
c 中的運算子除了少數幾個之外,全部可以過載,而且只能過載c 中已有的運算子。過載之後運算子的優先順序和結合性都不會改變。運算子過載是針對新型別資料的實際需要,對原有運算子進行適當的改造。一般來說,過載的功能應當與原有功能相類似,不能改變原運算子的操作物件個數,同時至少要有乙個操作物件是自定義型別。...
c 運算子過載string類
一 運算子過載的規則 運算子過載規則如下 c 中的運算子除了少數幾個之外,全部可以過載,而且只能過載c 中已有的運算子。過載之後運算子的優先順序和結合性都不會改變。運算子過載是針對新型別資料的實際需要,對原有運算子進行適當的改造。一般來說,過載的功能應當與原有功能相類似,不能改變原運算子的操作物件個...
string型別過載賦值運算子
cmystring cmystring operator const cmystring str 上述 有四點需要注意 把返回值的型別宣告為該型別的引用,並在函式結束前返回例項自身的引用 this 只有返回乙個引用,才可以允許連續賦值 把傳入的引數的型別宣告為常量應用,如果傳入的引數不是引用而是例項...