運算子過載 string類

2021-09-01 12:26:53 字數 2262 閱讀 9255

①、 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 運算子過載的作用 就像我們引言中所描述的一樣...