# c++运算符重载之 前置++, 后置++, 负号运算符, 类型转换函数, 以及输入输出运算符...
c++運(yùn)算符重載之 前置++, 后置++, 負(fù)號(hào)運(yùn)算符, 類(lèi)型轉(zhuǎn)換函數(shù), 以及輸入輸出運(yùn)算符
標(biāo)簽(空格分隔): c++
前言
我在c++學(xué)習(xí)的過(guò)程中, 對(duì)這幾個(gè)不太常見(jiàn)的運(yùn)算符重載不太會(huì)寫(xiě)。出現(xiàn)了很多bug,而且搜索網(wǎng)上東西也比較少,所以特地寫(xiě)這一篇來(lái)分享給大家,同時(shí)加深印象。有出錯(cuò)的地方希望給位朋友斧正。
先看例子, 我定義一個(gè)類(lèi) Int 和我們基礎(chǔ)的c++ int是一個(gè)意思
using namespace std; #include <iostream> class Int {int data; public:Int &operator++(); //前置++operator int(); //轉(zhuǎn)換運(yùn)算符Int operator++(int) ; //后置++Int &operator--() ; //前置--Int operator--(int) ; //后置--Int operator-() ; //負(fù)號(hào)運(yùn)算符friend ostream & operator<<(ostream &out, Int& a) ; //輸出運(yùn)算符號(hào)friend istream & operator >> (istream &in, Int& a) ; //輸入運(yùn)算符號(hào)};1.前置與后置++ 前置–和后置–
首先明確的是咱們c和c++ 的前置++和后置++ 都是重載的++ 那他們的重載怎么寫(xiě)呢?
Int& Int::operator++() { //前置++this->data++; return *this;}Int Int::operator++(int) { //后置++Int tmp(*this);this->data++;return tmp;}Int& Int::operator--() { //前置--this->data--;return *this;}Int Int::operator--(int) { //后置--Int temp(*this);this->data--;return temp;}Int& Int::operator++() //前置++
Int Int::operator++(int) //后置++
細(xì)心的朋友已經(jīng)發(fā)現(xiàn)了 關(guān)鍵在于后置的重載++ 首先返回的是Int而不是 對(duì)象的引用, 然后在最后面(int)加了int參數(shù) 。 第一個(gè)問(wèn)題好解決,因?yàn)槲液笾?#43;+函數(shù)返回的是tmp這個(gè)臨時(shí)對(duì)象,在函數(shù)結(jié)束后被釋放了,所以當(dāng)然不能傳引用啦, 對(duì)于第二個(gè)問(wèn)題,這個(gè)是c++的規(guī)定。好吧我也很無(wú)語(yǔ)。只要在重載操作符的參數(shù)中加上一個(gè)int型參數(shù),記住你改成double 都會(huì)錯(cuò)的。
前置–和后置–原理與前面相同,代碼相似,不予復(fù)述。
2類(lèi)型轉(zhuǎn)換函數(shù)
轉(zhuǎn)化運(yùn)算符, 就是把類(lèi)的對(duì)象轉(zhuǎn)化成其他(基本類(lèi)型,或其他類(lèi)型)
Int::operator int() { //轉(zhuǎn)換運(yùn)算符return data;}函數(shù)形式里不能有返回值,不能有參數(shù),只能返回要轉(zhuǎn)換的數(shù)據(jù)類(lèi)型。 這里int是我要轉(zhuǎn)化的類(lèi)型所以我括號(hào)前是寫(xiě)int 返回的也是int 類(lèi)型。
用于處理這樣的問(wèn)題
int c = 0; Int c1(2); c = c1; //這時(shí) c1調(diào)用類(lèi)型轉(zhuǎn)換函數(shù) 對(duì)象c1返回了int 賦給變量c3負(fù)號(hào)重載
Int Int::operator-() { //負(fù)號(hào)運(yùn)算符Int tmp;tmp.data = -data;return tmp;}函數(shù)形式里,不能有參數(shù),返回對(duì)象(不能是引用原因和后置++相同)。
記住要用一個(gè)臨時(shí)的tmp來(lái)儲(chǔ)存變負(fù)的對(duì)象屬性值,返回tmp
下面是錯(cuò)誤的寫(xiě)法:
重載-號(hào)的意思不是直接改變對(duì)象的符號(hào),是返回一個(gè)符號(hào)相反的對(duì)象,舉個(gè)例子,-5不是說(shuō)把5改成負(fù)數(shù),是得到5的相反數(shù),準(zhǔn)確說(shuō),負(fù)號(hào)有兩個(gè)重載,取反操作符和減號(hào)操作符,這個(gè)是前者
4輸入輸出重載
ostream & operator<<(ostream &out, Int& a) { //輸出運(yùn)算符號(hào)out << a.data;return out;}istream & operator >> (istream &in, Int& a) { //輸入運(yùn)算符號(hào)in >> a.data;return in;}提幾個(gè)小問(wèn)題吧, 首先所有參數(shù)都是引用不是對(duì)象(尤其是輸入函數(shù)不傳引用,輸入函數(shù)不改變值) 然后要記得 istream是用在輸入中 不要用反, 不要加作用域運(yùn)算符。
轉(zhuǎn)載于:https://www.cnblogs.com/qq874455953/p/9589224.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的# c++运算符重载之 前置++, 后置++, 负号运算符, 类型转换函数, 以及输入输出运算符...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Centos 6.5 python 2.
- 下一篇: java Web 文件上传