String運算子過載

2021-07-03 03:41:42 字數 2325 閱讀 2167

運算子的過載實際是一種特殊的函式過載,必須定義乙個函式,並告訴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 只有返回乙個引用,才可以允許連續賦值 把傳入的引數的型別宣告為常量應用,如果傳入的引數不是引用而是例項...