第十四章 過載操作與轉換 一

2021-05-24 05:34:18 字數 1960 閱讀 8556

1)  ::   .*  .  ?: 這4個符號不能過載

2)  過載操作必須有乙個類型別的運算元(強制過載操作符不能重新定義在已有的內建型別中)

3)  優先順序和結合性是固定的

4)  過載後&&不再具有短路求值特性

1)  必須作為非成員函式

2)  輸出

ostream& operator<< (ostream& os,const classtype &object)

3)  輸入

必須處理錯誤和檔案結束的可能性

istream& operator<< (istream& in,const classtype &object)

1)  一些例子

a operator+(const a& a,const a& b);//注意返回值為了與內建操作保持一致,沒有設定為引用,+可以通過+=來實現.

inline bool operator == (const a&a,const a&b);//一般在實現!=等操作的時候,使用==

2)  對於《操作符,由於很多關聯容器和演算法需要,最好定義為非成員函式.

必須返回*this

由於可能對const 和非const物件都使用下標操作符,所以一般 宣告如下

int& operator(const size_t);

const int& operator(const size_t) const ;

例子:

a& operator*()

a* operator->()

const a& operator*() const

const a* operator->() const

過載箭頭操作符必須參會指向類型別的指標,或定義了自己的指標操作符的類物件.

例子:

a& operator++()//前

a& operator++(int)//後,標識了乙個int型別的0來區別前後++

1)  例子:

struct absint };

int i=-42;

absint absobj;

unsigned int ui = absobj(i);//類似於函式的使用方式,但是比函式方便;

2)  用於標準庫演算法

class gt_cls

bool operator()(const string&s)

private:

std::string ::size_type bound; };

count_if(words.begin(),words.end(),gt_cls(6));//返回長度小於6的string的數量

3)  標準庫定義了一組物件類在functional標頭檔案中

plus+

minus-

multiplies*

divides/

modulus%

negate-

equal_to==

not_equal_to!=

greater>

greater_equal>=

less<

less_equal<=

logical_and&&

logical_or||

logical_not!

例子:

sort(svec.begin(),svec.end(),greater());//降序排列string

4)  函式物件對應的函式介面卡

bind2nd

not1()

例子:

count_if(vec.begin(),vec.end(),bind2nd(less_equal(),10));//小於10元素的個數的統計出來

count_if(vec.begin(),vec.end(),not1(bind2nd(less_equal(),10)));//不小於10

第十四章 過載操作與轉換 二

14.9 轉換與類型別 1 轉換操作符 例子 class smallint operator int const 沒有返回型別,沒有引數列表,const型別 private stad size t val 2 只要存在轉換,編譯器就會在內建轉化的地方就會自動應用之,所以一般乙個類中乙個型別轉換就足夠...

第十四章 過載操作符與轉換

第十四章 過載操作符與轉換 1 過載操作符 保留字operator後接需定義的操作符符號 過載操作符不能重新定義用於內建型別物件的操作符,至少有乙個類型別或列舉型別 操作符定義為非成員函式時,必須設定為所操作類的友元 2 輸入和輸出操作符 輸出操作符應輸出物件的內容,進行最小限度的格式化 輸入操作符...

C Primer 第十四章 過載操作符與轉換

14.1 過載操作符的定義 操作符 可以被內建型別使用,比如兩個整數相加或相減,兩個字串相加,兩個陣列比較大小等等。自定義類預設是不能使用大多數操作符的。自定義類是復合型別,相加或想減或比較大小並沒有相應的規則匹配 兩個類相加等於什麼?兩個類如何確定誰大誰小?c 允許我們通過過載運算子的技術讓自定義...