欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

CPP核心編程4-重載遞增運(yùn)算符-創(chuàng)新互聯(lián)

在這里插入圖片描述
在這里插入圖片描述

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)元寶山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
#include "iostream"

using namespace std;

//遞增運(yùn)算符重載
//自定義整型
class MyInteger {friend ostream &operator<<(ostream &cout, MyInteger mi);

public:
    MyInteger() {m_Num = 0;
    }

    //重置前置++運(yùn)算符  返回引用是為了對(duì)同一個(gè)數(shù)進(jìn)行操作
    MyInteger &operator++() {//這里不能返回值MyInteger 必須返回MyInteger&  因?yàn)椴僮鞯男枰嵌家粋€(gè)對(duì)象,返回值就是拷貝了
        //先進(jìn)行++運(yùn)算
        m_Num++;
        //再將自身作返回
        return *this;
    }
    //重置后置++運(yùn)算符

private:
    int m_Num;
};

//重載左移運(yùn)算符
ostream &operator<<(ostream &cout, MyInteger mi) {cout<< mi.m_Num;
    return cout;
}

void test() {MyInteger mi;
    cout<< ++(++mi)<< endl;//C++里面原生的前置遞增可以鏈?zhǔn)秸{(diào)用,后置遞增不可以鏈?zhǔn)秸{(diào)用
}

int main() {//    test();
    //C++里面原生的前置遞增可以鏈?zhǔn)秸{(diào)用,后置遞增不可以鏈?zhǔn)秸{(diào)用
    int a = 0;
    ++(++a);
    cout<< a<< endl;//輸出2
    return 0;
}
2

后置遞增
C++里面后置++是不能鏈?zhǔn)秸{(diào)用的

#include "iostream"

using namespace std;

//遞增運(yùn)算符重載
//自定義整型
class MyInteger {friend ostream &operator<<(ostream &cout, MyInteger mi);

public:
    MyInteger() {m_Num = 0;
    }

    //重置前置++運(yùn)算符  返回引用是為了對(duì)同一個(gè)數(shù)進(jìn)行操作
    MyInteger &operator++() {//這里不能返回值MyInteger 必須返回MyInteger&  因?yàn)椴僮鞯男枰嵌家粋€(gè)對(duì)象,返回值就是拷貝了
        //先進(jìn)行++運(yùn)算
        m_Num++;
        //再將自身作返回
        return *this;
    }

    //重置后置++運(yùn)算符   ?。。。。?!之前學(xué)習(xí)的占位符終于找到用武之地了
    //返回值用const修飾,他能防止一些問(wèn)題,例如: (p++)++
    const MyInteger operator++(int) {//int 代表占位參數(shù),可以用于區(qū)分前置和后置遞增,這里只能是int,double等不好使
        MyInteger temp = *this;
        m_Num++;
        return temp;
    }

private:
    int m_Num;
};

//重載左移運(yùn)算符
ostream &operator<<(ostream &cout, MyInteger mi) {cout<< mi.m_Num;
    return cout;
}

void test() {MyInteger mi;
//    cout<< ++(++mi)<< endl;
    cout<< mi++<< endl;//輸出0   //返回值用const修飾,他能防止一些問(wèn)題,例如: (p++)++
    cout<< mi<< endl;//輸出1
}

int main() {test();
    return 0;
}
0
1

遞增運(yùn)算符分為前置遞增和后置遞增。這兩個(gè)分開(kāi)來(lái)說(shuō)吧。
前置遞增。
需要?jiǎng)?chuàng)建一個(gè)名字叫做 人 的類,這個(gè)類中有一個(gè) 年齡 屬性,且默認(rèn)值為0,然后類外重載左移運(yùn)算符方便打印輸出。我們對(duì)人類的對(duì)象進(jìn)行遞增操作就是想讓年齡增加。如下:

#includeusing namespace std;

class Person
{public:
int age = 0;
Person& operator++()//**1**
{age += 1;
return *this;
}
};
ostream& operator<<(ostream& cout, const Person &p)
{cout<< p.age;
return cout;
}
void test1()
{Person p;
cout<< "++p = "<< ++p<< endl;
cout<< "++(++p) = "<< ++(++p)<< endl;
cout<< "p = "<< p<< endl;
}
int main()
{test1();
system("pause");
return 0;
}

第一個(gè)問(wèn)題 :返回值為什么是引用?
答案:因?yàn)榍爸眠f增運(yùn)算符可以這樣使用:++(++p)。即進(jìn)行兩次連續(xù)的遞增操作。若返回值為一個(gè)對(duì)象,則會(huì)產(chǎn)生一個(gè)匿名對(duì)象,之后++操作是對(duì)匿名獨(dú)對(duì)象進(jìn)行++操作。結(jié)果如下:
第二個(gè)問(wèn)題 :為什么這是前置遞增,不應(yīng)該是后置遞增嗎?
首先解釋一下問(wèn)題,還是舉個(gè)例子吧。
加運(yùn)算符在類內(nèi)實(shí)現(xiàn)重載的寫法:Person operator+(Person &p);
當(dāng)你調(diào)用的時(shí)候,如:p1 + p2,其本質(zhì)調(diào)用是 p1.operator+(p2); 。你會(huì)發(fā)現(xiàn),是 +號(hào)前面的對(duì)象調(diào)用函數(shù),加號(hào)后面的對(duì)象是參數(shù) 。所以,當(dāng)我們調(diào)用Person& operator++();的時(shí)候,是不是應(yīng)該寫 p1++??
答案:(個(gè)人推測(cè))可能和后置遞增有關(guān)。為了區(qū)分前置和后置。

在這里插入圖片描述

后置遞增。
第一個(gè)問(wèn)題 :是后置遞增類內(nèi)重載的寫法遇到的問(wèn)題:
返回值和參數(shù)都是啥??想這樣寫??

Person operator++();
Person& operator++();
Person operator++(Person& p);
....

想了好久,也沒(méi)想出來(lái)該怎么寫。
答案:const Person operator++(int)
其中int的作用是占位符,為了和前置遞增區(qū)分開(kāi)來(lái),而且只能寫int,寫double、float等都是不行的。因?yàn)闆](méi)有這個(gè)占位參數(shù)的話,該函數(shù)與前置遞增就只有返回值不同了,而返回值是不可以作為函數(shù)重載的條件的。
至于返回值的為什么是Person話,而且還用const修飾,在下一個(gè)問(wèn)題中說(shuō)明。
第二個(gè)問(wèn)題 具體是怎樣實(shí)現(xiàn)的,畢竟后置遞增和前置遞增還是有區(qū)別的。
答案:

const Person operator++(int)
{Person p = *this;
age += 1;
return p;
}

首先創(chuàng)建一個(gè)臨時(shí)的對(duì)象,用來(lái)保存當(dāng)前值,因?yàn)樵摵瘮?shù)最后返回的不是遞增后的結(jié)果,而是遞增之前的值。
然后,屬性加一,完成遞增操作。
最后,返回臨時(shí)對(duì)象
注意1: 此時(shí)的temp是一個(gè)臨時(shí)對(duì)象,該函數(shù)運(yùn)行結(jié)束后就會(huì)被編譯器回收,所以我們直接返回temp的引用。我們需要進(jìn)行值返回,值返回的話會(huì)調(diào)用拷貝構(gòu)造函數(shù)重新創(chuàng)建一個(gè)對(duì)象。
注意2: 返回值用const修飾,他能防止一些問(wèn)題,例如: (p++)++ 。我們可以做一個(gè)小測(cè)試。

int p = 0;
cout<< "(p++)++ = "<< (p++)++<< endl;
cout<< "p = "<< p<< endl;

我們預(yù)想的結(jié)果可能是輸出:(p++)++ = 1 p = 2
但實(shí)際結(jié)果是這樣的:
報(bào)錯(cuò)了,原因是++需要可修改的左值。從結(jié)果我們可以知道,表達(dá)式p++的結(jié)果是不允許被修改的,所以我們后置遞增的返回值是const類型的。
那么為什么會(huì)這樣呢?
同樣舉個(gè)例子:
在這里插入圖片描述

int p;
cout<< "p = "<< p<< endl;
cout<< "p++ = "<< p++<< endl;
cout<< "p = "<< p<< endl;

運(yùn)行結(jié)果如下:
我們輸出 p++ 的結(jié)果是0,這個(gè)0是哪里來(lái)的呢??是變量p中存儲(chǔ)的嗎??并不是,此時(shí)p中存儲(chǔ)的值已經(jīng)被改變了,這個(gè)0是產(chǎn)生的一個(gè)臨時(shí)值。這個(gè)臨時(shí)值在內(nèi)存中的位置是未知的,我們無(wú)法對(duì)其進(jìn)行修改。
所以,當(dāng)我們 (p++)++ 這樣使用后置遞增運(yùn)算符的時(shí)候,相當(dāng)于嘗試修改臨時(shí)變量的值,這是不被允許的。
所以,我們重載遞增操作符的返回值要用const來(lái)修飾。
在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站名稱:CPP核心編程4-重載遞增運(yùn)算符-創(chuàng)新互聯(lián)
瀏覽地址:http://aaarwkj.com/article26/dihpjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站收錄、品牌網(wǎng)站制作、服務(wù)器托管網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
亚洲青青草原一区二区| 亚洲国产日韩欧美第一页| 韩国日本午夜福利在线| 人妻少妇中文字幕久久| 九九有点热以前的视频| 亚洲精品第一页中文字幕| 中文字幕在线一区国产精品| 欧美精品欧美激情免费区| av中文字幕熟妇人妻少妇| 一区二区三区视频免费观看| 秋霞日韩欧美一区二区三区 | 日韩在线中文字幕一区| 粉嫩国产av一区二区三区| 日本一区二区三区三州免费观看| 亚洲精品日韩国产3区| 精品不卡一区二区三区| 91这里只有精品在线观看| 四虎永久精品在线视频| 亚洲精品视频久久偷拍| 欧美日韩亚洲精品综合网| 中文字幕日韩在线欧美一区| 亚洲精品熟女国产中文| 四虎精品在线免费视频| 97视频在线中文字幕| 91精品欧美综合在线| 日本精品视频一区二区三区| 亚洲一区二区在线视频在线观看| 亚洲狠狠爱一区二区三区| 欧美福利区免费观看视频| 久亚洲精品色婷婷国产熟女| 久久国产精品午夜视频| 国产激情视频在线观看你懂的| 国产一区二区三区日本精品| 三级黄色片免费久久久| 福利在线视频一区二区| 91免费人成网站在线观看| 国内自拍视频一区高清视频| 狠狠躁夜夜躁人人爽蜜桃| av天堂中文一区二区三区| 不卡av免费在线网址| 亚洲中文字幕激情中午字幕|