国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++運算符重載及友元函數(shù)

2019-11-11 04:38:36
字體:
供稿:網(wǎng)友

重點:常用于定義兩個類之間的運算,比如重載+運算符,實現(xiàn)兩個類相加等。目的是隱藏內(nèi)部機理,強調(diào)了實質(zhì)。

例如通過運算符重載實現(xiàn)兩個Time類的相加,函數(shù)聲明為:

Time Operator+(const Time & t) const;

定義函數(shù)頭為:

Time Time::operator+(const Time & t) const

把operator+看作成員函數(shù)名,可以用函數(shù)表示法如下調(diào)用:

total = a.operator+(b);

可以使用運算符表示法,更為直觀:

total = a + b;

需要注意,在運算符表示法中,運算符左側的對象是調(diào)用對象,右邊的對象是作為參數(shù)被傳遞的對象。

由于+是從左向右結合的運算符,還能這么用:

total = a + b + c;

其相當于:

total = a.operator+(b.operator+(c));

運算符重載的限制:

重載后的運算符必需至少有一個操作數(shù)是用戶定義的類型,可以防止用戶為標準類型重載與運算符;不能違反運算符原來的句法規(guī)則;不能修改運算符優(yōu)先級;不能創(chuàng)建新的運算符。

友元:公有類提供唯一訪問私有成員數(shù)據(jù)的途徑,但這種限制太嚴格。于是C++提供了友元機制,包括:

友元函數(shù);友元類;友元成員函數(shù)。

友元函數(shù)即賦予該函數(shù)與類的成員函數(shù)相同的訪問權限。

重載二元運算符時常常需要友元,能避免左邊的操作數(shù)必須是類對象的限制,例如數(shù)乘。采用非成員函數(shù)重載運算符,左邊的操作數(shù)對應于第一個參數(shù),右邊的操作數(shù)對應于第二個參數(shù),同時又能因為友元函數(shù)而訪問類的私有成員。

A = 2.75 * B;

相當于調(diào)用:

A = operator*(2.75,B);

其原型:

friend Time operator*(double m, const Time & t);//雖在類聲明中聲明,但不是成員函數(shù),然而卻與成員函數(shù)訪問權限相同。另外由于不是成員函數(shù),在類實現(xiàn)定義文件cpp中不要使用Time::等限定符,且不要使用friend。

友元并不違背面向?qū)ο螅惵暶魅匀豢刂屏四男┖瘮?shù)可以訪問私有數(shù)據(jù),應將友元函數(shù)看作類的擴展接口的組成部分,類方法和友元只是表達類接口的兩種不同機制。

另外,友元在重載<<運算符中也起重要作用。想用cout<<trip;直觀地實現(xiàn)輸出,如果采用成員函數(shù)重載運算符,則左邊的操作數(shù)必須是Time類對象,只能這么用:trip<<cout;太不直觀。因此使用友元,同時返回ostream對象的引用可以繼承連續(xù)<<輸出的特點。

std::ostream & operator<<(std::ostream & os, const Time & t)

{

os << ..;

return os;

}

記得聲明的原型中要加friend關鍵字。

非成員版本的重載運算符函數(shù)所需的形參數(shù)目與運算符使用的操作數(shù)數(shù)目相同,而成員函數(shù)版本所需的參數(shù)數(shù)目少一個,因為其中的一個操作數(shù)是被隱式地傳遞的調(diào)用對象。


上一篇:c++socket代碼

下一篇:C++學習一虛繼承

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 洪雅县| 仁怀市| 富锦市| 丽水市| 万盛区| 柳江县| 扶余县| 阳山县| 大宁县| 荆门市| 连南| 新宾| 贡觉县| 姚安县| 浦东新区| 山东省| 北安市| 茌平县| 赣榆县| 彰化县| 石渠县| 黎川县| 卢龙县| 南京市| 应城市| 犍为县| 长治县| 方正县| 青川县| 平定县| 玉树县| 蛟河市| 靖州| 广宁县| 常宁市| 连山| 庆阳市| 文登市| 台山市| 剑川县| 平乐县|