C 之過載運算與型別轉換

2021-10-06 23:55:13 字數 2690 閱讀 7568

賦值運算子

算術和關係運算子

下標運算子

遞增和遞減運算子

過載、型別轉換與運算子

過載的運算子是具有特殊名字的函式:它們的名字由關鍵字operator和其後要定義的運算符號共同組成。和其他函式一樣,過載的運算子也包含返回型別、引數列表以及函式體。

對於乙個運算子函式來說,它或者是類的成員,或者至少含有乙個類型別的引數

當乙個過載的運算子是成員函式時,this繫結到左側運算物件。成員運算子函式的(顯式)引數數量比與運算物件的數量少乙個

當我們定義過載的運算子時,必須首先決定是將其宣告為類的成員函式還是宣告乙個普通的非成員函式。在某些時候我們別無選擇,因為有的運算子作為普通函式比作為成員更好,有下面原則來選擇:

當我們把運算子定義成成員函式時,它的左側運算物件必須是運算子所屬類的乙個物件,例如:

string s =

"world"

;string t = s +

"!";

//正確

string u =

"hi"

+ s;

//錯誤

使用下面宣告的類來解決各種運算子過載

class

test

const

int&

operator

(int n)

const

test()

test

(int _data1,

int _data2)

:data1

(_data1)

,data2

(_data2)

~test()

private

: vector<

int> vec;

int data1;

double data2;

};

一般宣告為類的友元函式,便於訪問類的私有函式

ostream&

operator

<<

(ostream& os,

const test& test)

第乙個引數是ostream的非常量引用,非常量是因為向流寫入會改變狀態,引用是io物件不允許拷貝,第二個引數是要輸出類的物件的常引用。

istream&

operator

>>

(istream& is, test& test)

else

return is;

}

過載輸入運算子必須處理輸入可能失敗的情況,而輸出運算子不需要

輸入時的錯誤:

test& test::

operator+=

(const test& test)

通常情況下,我們把算術和關係運算子定義成非成員函式以允許對左側或右側的運算物件進行轉換,因為這些運算子一般不需要改變運算物件的狀態,所以形參都是常量的引用。

test operator+(

const test& test1,

const test& test2)

bool

operator==(

const test& test1,

const test& test2)

bool

operator!=(

const test& test1,

const test& test2)

int

&operator

(int n)

const

int&

operator

(int n)

const

//前置

test& test::

operator++(

)test& test::

operator--(

)//後置

test test::

operator++(

int)

test test::

operator--(

int)

operator type() const;

舉個例子:

class

smallint

operator

int(

)const

private

: std:

:size_ t val;};

intmain()

在實踐中,類很少提供型別轉換運算子。在大多數情況下,如果型別轉換自動發生,使用者可能會感覺比較以外,而不是感覺受到了幫助。

所以c++新標準引入了顯式的型別轉換運算子

class

smallint

}int

main()

該規定存在乙個例外,即如果表示式被用作條件,則編譯器會將顯式的型別轉換自動應用於它。換句話說,當表示式出現在下列位置時,顯式的型別轉換將被隱式地執行:

c 過載運算與型別轉換

1.基礎概念 過載的運算子是具有特殊名字的函式 過載運算子函式,運算子函式。過載運算子 依次包含返回型別,函式名 operator 引數列表,函式體。只有過載的函式呼叫運算子operator 才能有預設實參。關於引數的數量,一般來說,一元運算子有乙個引數,二元有兩個,三元有三個 但是如果該運算子函式...

過載運算與型別轉換

1.基本概念 名字由關鍵字operator和其後要定義的運算符號共同組成。對於乙個運算子來說,它或者是類的成員,或者至少含有乙個類型別的引數。通常情況下,不應該過載逗號 取位址 邏輯與和邏輯或運算子。2.當我們定義過載的運算子時,必須首先決定是將其宣告為類的成員函式還是宣告為乙個普通的非成員函式。一...

C 知識 過載運算與型別轉換

最後,如果有理解不對的 地方,希望大家不吝賜教,謝謝!c 系列 前一章 拷貝控制 下一章 待續 當運算子作用於類型別的運算物件時,可以通過運算子過載重新定義該運算子的含義。明智地使用運算子過載能令我們的程式更易於編寫和閱讀。過載的運算子是具有特殊名字的函式 它們的名字由關鍵字operator和其後要...