深入C++的運算符重載
阿新 • • 發佈:2017-06-13
stream pre 比較 float 聲明變量 友元 輸出 賦值 per
對於簡單的運算符,可以參考之前的博文。之後會有一篇關於從等號運算符重載的角度研究深淺拷貝的博文。
逗號運算符重載
逗號運算符重載需要一個參數,並且返回自身類。逗號運算符在復制操作中比較常見,下面就是以賦值操作為例的逗號運算符重載。
#include<string> #include<iostream> using namespace std; class Tem{ private: int x; public: Tem(int); Tem operator ,(Tem); void display(); }; Tem::Tem(int xx=0){ x = xx; } Tem Tem::operator , (Tem t){ cout<<t.x<<endl; return Tem(t.x); } void Tem::display(){ cout<<"Class(Tem) includes of: "<<x<<endl; } int main(){ Tem tem1(10); Tem tem2(20); Tem other = (tem1,tem2); //會選擇第二個 int a= 1,2;a等於2而不是1 other.display(); return 0; }
取成員運算符重載
返回類類型的指針變量,符合平時的用法,這樣就可以不用在聲明變量時候使用指針,但是之後可以按照指針的方式調用,簡單方便。
#include<iostream> using namespace std; class Tem{ public: int n; float m; Tem* operator ->(){ return this; } }; int main(){ Tem tem; tem->m = 10; //調用->運算符,返回Tem*類型並訪問m cout<<"tem.m is "<<tem.m<<endl; cout<<"tem->m is "<<tem->m<<endl; return 0; }
輸入輸出運算符重載
>>,\<\<運算符重載分別在cin、cout之後調用。我們需要用友元運算符對他們進行重載,註意返回類型分別是istream 和 ostream。
#include<iostream> using namespace std; class Date{ private: int year,month,day; public: Date (int y,int m,int d){ year = y; month = m; day = d; } friend ostream& operator <<(ostream &stream,const Date &date){ stream<<date.year<<" "<<date.month<<" "<<date.day<<endl; return stream; } friend istream& operator >>(istream &stream,Date &date){ stream>>date.year>>date.month>>date.day; return stream; } }; int main(){ Date _date(2017,6,13); cout<<_date; cin>>_date; cout<<_date; return 0; }
歡迎進一步交流本博文相關內容:
博客園地址 : http://www.cnblogs.com/AsuraDong/
CSDN地址 : http://blog.csdn.net/asuradong
也可以致信進行交流 : [email protected]
歡迎轉載 , 但請指明出處 : )
深入C++的運算符重載