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