①、 c++中的運算子除了少數幾個之外,全部可以過載,而且只能過載c++中已有的運算子。
②、 過載之後運算子的優先順序和結合性都不會改變。
③、 運算子過載是針對新型別資料的實際需要,對原有運算子進行適當的改造。一般來說,過載的功能應當與原有功能相類似,不能改變原運算子的操作物件個數,同時至少要有乙個操作物件是自定義型別。
它們是:成員運算子「.」、指標運算子「*」、作用域運算子「::」、「sizeof」、條件運算子「?:」。
運算子過載為類的成員函式的一般語法形式為:
函式型別 operator 運算子(形參表)
運算子過載為類的友元函式的一般語法形式為:
friend 函式型別 operator 運算子(形參表)
其中,函式型別就是運算結果型別;operator是定義運算子過載函式的關鍵字;運算子是過載的運算子名稱。
class string
//類內是this_call的呼叫約定,成員方法隱藏this指標,指向一般為左運算元,所以只用傳右運算元即可
string(const string& rhs)
類內=(賦值)的過載,左右運算元型別均為string,類內只用傳右運算元即可string& operator=(const string& rhs)
return *this;
}
//析構~string()
類內實現+的過載,傳入右運算元型別為char*(可省略:char*可隱式生成臨時物件,呼叫左右運算元都為string類的過載函式)//const string operator+(char* prhs)
//
string str2 = str1 + 「world」;//「helloworld」 +是自左向右,可根據str1.推演str2的型別
string str3 = 「hi」 + str1;//「hihello」;錯誤,不能根據右邊型別推演左邊型別,只能呼叫左操作符為char*,右操作符為string的函式,或者兩個型別都是string 的函式
類內==的過載,左右運算元型別均為string,類內只用傳右運算元即可
bool operator==(const string& rhs)
if (str1 == str2)
char& operator(int index)
std::cout << str1[0] << std::endl;// int p[10] ==> p int* p[1]
類內《的過載,左運算元型別為std::cout,右運算元型別為string,類內只用傳右運算元即可
bool operator<(const string& rhs)
if (str2 < str2)
private:
char* pstr;
//類外不能訪問類內的私有成員變數,設定友元函式
friend const string operator+(char*, const string&);
friend const string operator+(const string&, const string&);
friend std::ostream& operator <<(std::ostream&, const string&);
};
//類外實現+的過載,左運算元型別為char*,右運算元為string(可省略:char*可先呼叫構造生成臨時物件,後呼叫左右運算元都為string類的過載函式)//const string operator+(char* plhs, const string& rhs)
//
string str3 = 「hi」 + str1;//「hihello」;
類外實現+的過載,左右運算元型別均為string
const string operator+(const string& lhs, const string& rhs)
string str4 = str1 + str2; //「hellohelloworld」
類外實現《的過載,左運算元為std::ostream的型別,右運算元為string型別
std::ostream& operator <<(std::ostream& out, const string& rhs)
c 運算子過載string類
一 運算子過載的規則 運算子過載規則如下 c 中的運算子除了少數幾個之外,全部可以過載,而且只能過載c 中已有的運算子。過載之後運算子的優先順序和結合性都不會改變。運算子過載是針對新型別資料的實際需要,對原有運算子進行適當的改造。一般來說,過載的功能應當與原有功能相類似,不能改變原運算子的操作物件個...
String運算子過載
運算子的過載實際是一種特殊的函式過載,必須定義乙個函式,並告訴c 編譯器,當遇到該過載的運算子時呼叫此函式。這個函式叫做運算子過載函式,通常為類的成員函式。定義運算子過載函式的一般格式 返回值型別 類名 operator過載的運算子 參數列 operator是關鍵字,它與過載的運算子一起構成函式名。...
運算子過載 過載實現複數 string類
3 運算子過載實現string類 引言 在模板中,我們定義了如下的sum函式 template typename t t sum t a,t b 如果是正常的資料型別還可以運算,但是遇到物件相加了怎麼辦呢?那麼就引出我們今天所要討論的內容 運算子過載 1 運算子過載的作用 就像我們引言中所描述的一樣...