c++——函數符號重載2-15

一般情況下,單目運算符最好重載為類的成員函數粗蔚;雙目運算符則最好重載為類的友元函數。
以下一些雙目運算符不能重載為類的友元函數:=饶火、()鹏控、[]致扯、->。
類型轉換函數只能定義為一個類的成員函數而不能定義為類的友元函數当辐。 C++提供4個類型轉換函數:reinterpret_cast(在編譯期間實現(xiàn)轉換)抖僵、const_cast(在編譯期間實現(xiàn)轉換)、stactic_cast(在編譯期間實現(xiàn)轉換)缘揪、dynamic_cast(在運行期間實現(xiàn)轉換耍群,并可以返回轉換成功與否的標志)。
若一個運算符的操作需要修改對象的狀態(tài)找筝,選擇重載為成員函數較好蹈垢。
若運算符所需的操作數(尤其是第一個操作數)希望有隱式類型轉換,則只能選用友元函數袖裕。
當運算符函數是一個成員函數時曹抬,最左邊的操作數(或者只有最左邊的操作數)必須是運算符類的一個類對象(或者是對該類對象的引用)。如果左邊的操作數必須是一個不同類的對象急鳄,或者是一個內部 類型的對象谤民,該運算符函數必須作為一個友元函數來實現(xiàn)。
當需要重載運算符具有可交換性時疾宏,選擇重載為友元函數张足。

注意事項:

除了類屬關系運算符”.“、成員指針運算符”.*“坎藐、作用域運算符”::“为牍、sizeof運算符和三目運算符”?:“以外,C++中的所有運算符都可以重載岩馍。
重載運算符限制在C++語言中已有的運算符范圍內的允許重載的運算符之中吵聪,不能創(chuàng)建新的運算符抖单。
運算符重載實質上是函數重載捻爷,因此編譯程序對運算符重載的選擇,遵循函數重載的選擇原則绒怨。
重載之后的運算符不能改變運算符的優(yōu)先級和結合性赦肋,也不能改變運算符操作數的個數及語法結構块攒。
運算符重載不能改變該運算符用于內部類型對象的含義。它只能和用戶自定義類型的對象一起使用佃乘,或者用于用戶自定義類型的對象和內部類型的對象混合使用時囱井。
運算符重載是針對新類型數據的實際需要對原有運算符進行的適當的改造,重載的功能應當與原有功能相類似趣避,避免沒有目的地使用重載運算符庞呕。
#include <iostream>
#include <string>
using namespace std;

class Douary
{
public:
    ~Douary(){cout << "~Douary()\n";}
    //explicit:防止隱式類型轉換
    explicit  Douary(int real = 0, int vir = 0)
    {
        m_iRow = real;
        m_iCol = vir;
        //cout << "Douary(int,int)" << endl;
    }
    void show()
    {
        cout << m_iRow << '+' << m_iCol << endl;
    }


    friend Douary operator+ (const Douary &d1
                             , const Douary &d2);
    friend Douary operator- (const Douary &d1
                             , const Douary &d2);
    friend Douary operator* (const Douary &d1
                             , const Douary &d2);   
    friend Douary operator/ (const Douary &d1
                             , const Douary &d2);   
                             
                                                         
    friend ostream& operator <<(ostream& out
                                , const Douary &dou);
    friend istream& operator >>(istream &in
                    , Douary &dou);
private:
    int *Array;
    int m_iRow;
    int m_iCol;
};



Douary operator+(const Douary &d1, const Douary &d2)
{
    Douary dou;
    dou.m_iRow = d1.m_iRow + d2.m_iRow;
    dou.m_iCol = d1.m_iCol + d2.m_iCol;
    return dou;
}


Douary operator-(const Douary &d1, const Douary &d2)
{
    Douary dou;
    dou.m_iRow = d1.m_iRow - d2.m_iRow;
    dou.m_iCol = d1.m_iCol - d2.m_iCol;
    return dou;
}


Douary operator* (const Douary &d1, const Douary &d2)
{
    Douary dou;
    dou.m_iRow = d1.m_iRow * d2.m_iRow;
    dou.m_iCol = d1.m_iCol * d2.m_iCol;
    return dou;
}


Douary operator/ (const Douary &d1, const Douary &d2)
{
    Douary dou;
    dou.m_iRow = d1.m_iRow / d2.m_iRow;
    dou.m_iCol = d1.m_iCol / d2.m_iCol;
    return dou;
}


ostream& operator <<(ostream& out, const Douary &dou)
{

    out << dou.m_iRow << '+' << dou.m_iCol ;
    return out;
}

istream& operator >>(istream &in, Douary &dou)
{
    in >> dou.m_iRow >> dou.m_iCol;
    return in;
}

void fun(Douary dou)
{
    cout << dou << endl;
}

int main(void)
{

    Douary dou(12, 18);
    Douary dou1(2, 3);
    Douary dou2;

    dou2 = dou + dou1;  //-->dou2=dou+Douary(34);
    cout << dou2 << endl;
    
    dou2 = dou - dou1;
    cout << dou2 << endl;
    
    dou2 = dou * dou1;
    cout << dou2 << endl;
    
    dou2 = dou / dou1;
    cout << dou2 << endl;
    
    cin >> dou2 ;
    cout << dou2 << endl;

    return 0;
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子住练,更是在濱河造成了極大的恐慌地啰,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讲逛,死亡現(xiàn)場離奇詭異亏吝,居然都是意外死亡,警方通過查閱死者的電腦和手機盏混,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門蔚鸥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人许赃,你說我怎么就攤上這事止喷。” “怎么了混聊?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵弹谁,是天一觀的道長。 經常有香客問我技羔,道長,這世上最難降的妖魔是什么卧抗? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任藤滥,我火速辦了婚禮,結果婚禮上社裆,老公的妹妹穿的比我還像新娘拙绊。我一直安慰自己,他們只是感情好泳秀,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布标沪。 她就那樣靜靜地躺著,像睡著了一般嗜傅。 火紅的嫁衣襯著肌膚如雪金句。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天吕嘀,我揣著相機與錄音违寞,去河邊找鬼。 笑死偶房,一個胖子當著我的面吹牛趁曼,可吹牛的內容都是我干的。 我是一名探鬼主播棕洋,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼挡闰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起摄悯,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤赞季,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后射众,有當地人在樹林里發(fā)現(xiàn)了一具尸體碟摆,經...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年叨橱,在試婚紗的時候發(fā)現(xiàn)自己被綠了典蜕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡罗洗,死狀恐怖愉舔,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情伙菜,我是刑警寧澤轩缤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站贩绕,受9級特大地震影響火的,放射性物質發(fā)生泄漏。R本人自食惡果不足惜淑倾,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一馏鹤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娇哆,春花似錦湃累、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至勃黍,卻和暖如春宵统,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背覆获。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工榜田, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锻梳。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓箭券,卻偏偏與公主長得像,于是被迫代替她去往敵國和親疑枯。 傳聞我的和親對象是個殘疾皇子辩块,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,523評論 1 51
  • C++運算符重載-下篇 本章內容:1. 運算符重載的概述2. 重載算術運算符3. 重載按位運算符和二元邏輯運算符4...
    Haley_2013閱讀 1,445評論 0 49
  • C++運算符重載-上篇 本章內容:1. 運算符重載的概述2. 重載算術運算符3. 重載按位運算符和二元邏輯運算符4...
    Haley_2013閱讀 2,305評論 0 51
  • 1. 呼呼 …… 嗖嗖 …… 風兒呼嘯的吹,雨兒瑟瑟的追。 “老哥废亭,你這抖得有點厲害啊国章,眼睛還一睜一閉的?要不要穿...
    睡衣守閱讀 245評論 0 0
  • 青椒小王子閱讀 207評論 0 0