??博主主頁:@??. 一懷明月??
?????專欄系列:線性代數(shù),C初學(xué)者入門訓(xùn)練,題解C,C的使用文章,「初學(xué)」C++
??座右銘:“不要等到什么都沒有了,才下定決心去做”
??????大家覺不錯(cuò)的話,就懇求大家點(diǎn)點(diǎn)關(guān)注,點(diǎn)點(diǎn)小愛心,指點(diǎn)指點(diǎn)??????
目錄
??運(yùn)算符重載的函數(shù)作為類的成員函數(shù)和友元函數(shù)
??運(yùn)算符重載定義為類的成員函數(shù)
??運(yùn)算符重載函數(shù)作為類的友元函數(shù)
??實(shí)現(xiàn)“+”,“-“的普通重載函數(shù)和友元重載函數(shù)
??單目運(yùn)算符"++"和"--"的重載
??運(yùn)算符重載的函數(shù)作為類的成員函數(shù)和友元函數(shù)
??運(yùn)算符重載定義為類的成員函數(shù)
將運(yùn)算符重載定義為類的成員函數(shù)的原型在內(nèi)部聲明格式:
class 類名 { ... 返回類型 operator 運(yùn)算符(參數(shù)列表); ... };
在類外定義運(yùn)算符重載函數(shù)的格式:
返回類型 類名::operator 運(yùn)算符(參數(shù)列表) { ... }
??運(yùn)算符重載函數(shù)作為類的友元函數(shù)
將運(yùn)算符重載函數(shù)作為類的友元函數(shù)。它與用成員函數(shù)重載運(yùn)算符的函數(shù)的不同在于,成員函數(shù)重載運(yùn)算符的函數(shù)本身是類中的成員函數(shù),而友元函數(shù)是獨(dú)立于類外的普通函數(shù)。
將運(yùn)算符重載函數(shù)定義為類的友元函數(shù),其原型在類的內(nèi)部聲明格式如下:
class 類名 { ... friend 返回類型 operator 運(yùn)算符(參數(shù)列表); ... };
在類外定義友元運(yùn)算符重載函數(shù)的格式:
返回類型 operator 運(yùn)算符(參數(shù)列表) { ... }
與用成員函數(shù)定義的方法相比較,只是在類聲明函數(shù)原型時(shí)前面多了一個(gè)關(guān)鍵字friend,表明這是一個(gè)友元運(yùn)算符重載函數(shù),只有聲明為友元函數(shù),才可以訪問類的private成員;由于友元運(yùn)算符重載函數(shù)不是該類的成員函數(shù),所以在類外定義時(shí)不需要加上類名。
??實(shí)現(xiàn)“+”,“-“的普通重載函數(shù)和友元重載函數(shù)
#include<iostream> using namespace std; class A { public: A(double x=0,double y=0):a(x),b(y) { ; } void show() { cout<<"運(yùn)算后的結(jié)果為:"<<endl; cout<<"("<<a<<","<<b<<")"<<endl; } A operator+(A& ptr);//運(yùn)算符普通重載函數(shù) A operator-(A& ptr); // friend A operator+(A& pf,A& pc);//友元運(yùn)算符重載函數(shù) // friend A operator-(A& pf,A& pc); private: double a; double b; }; A A::operator+(A& ptr)//為什么ptr可以調(diào)用私有成員 { return A(a+ptr.a,b+ptr.b); } A A::operator-(A& ptr) { return A(a-ptr.a,b-ptr.b); } //A operator+(A& pf,A& pc) //{ // return A(pf.a+pc.a); //} //A operator-(A& pf,A& pc) //{ // return A(pf.a-pc.a,pf.b-pc.b); //} int main() { A a(1,0),b(0,1),c(1,0),d(0,1),ph; ph=a+b; ph.show(); ph=a-b; ph.show(); return 0; } 普通重載函數(shù)和友元重載函數(shù)的結(jié)果都是一樣的 運(yùn)算后的結(jié)果為: (1,1) 運(yùn)算后的結(jié)果為: (1,-1)
大家可能會(huì)疑惑,運(yùn)算符重載函數(shù)可以是類的成員函數(shù),也可以是類的友元函數(shù),是否可以既不是類的成員函數(shù)也不是類的友元函數(shù),其實(shí)是可以的,但是很少會(huì)用到,原因是普通函數(shù)不能直接訪問類的私有成員,由于友元的使用會(huì)破壞類的封裝,因此從原則上說,要盡量將運(yùn)算符重載為成員函數(shù)。有時(shí)為了方便理解,一般將單目運(yùn)算符重載為成員函數(shù),將雙目運(yùn)算符重載為友元函數(shù)。但是也有例外,C++規(guī)定,有的運(yùn)算符(賦值運(yùn)算符,下標(biāo)運(yùn)算符,函數(shù)調(diào)用運(yùn)算符)必須重載為類的成員函數(shù),有的運(yùn)算符則不能重載為類的成員函數(shù)(插入運(yùn)算符"<<"和流提取運(yùn)算符">>"、類型轉(zhuǎn)化運(yùn)算符)。
??單目運(yùn)算符"++"和"--"的重載
有兩種形式:前置的++ --,后置的++ --
有兩種方法:運(yùn)算符重載的成員函數(shù)? 運(yùn)算符重載的友元函數(shù)
(1)運(yùn)算符重載的成員函數(shù):
(1)運(yùn)算符重載的成員函數(shù) #include<iostream> using namespace std; class A { public: A(int count=0):Count(count) { ; } void show() { cout<<"運(yùn)算后結(jié)果為:"<<Count<<endl; } //前置++,-- A operator++() { ++Count; return *this; } A operator--() { --Count; return *this; } //后置++,-- A operator++(int) { A num=*this; ++(*this); return num; } A operator--(int) { A num=*this; --(*this); return num; } private: int Count; }; int main() { A a(100),b(100),c(100),d(100); (++a).show(); (b++).show(); (--c).show(); (d--).show(); return 0; } 結(jié)果為: 運(yùn)算后結(jié)果為:101 運(yùn)算后結(jié)果為:100 運(yùn)算后結(jié)果為:99 運(yùn)算后結(jié)果為:100
(2)運(yùn)算符重載的友元函數(shù):文章來源:http://www.zghlxwxcb.cn/news/detail-478346.html
(1)運(yùn)算符重載的成員函數(shù) #include<iostream> using namespace std; class A { public: A(int count=0):Count(count) { ; } void show() { cout<<"運(yùn)算后結(jié)果為:"<<Count<<endl; } friend A operator++(A& ptr); friend A operator--(A& ptr); friend A operator++(A& ptr,int); friend A operator--(A& ptr,int); private: int Count; }; //前置++,-- A operator++(A& ptr) { ++ptr.Count; return ptr; } A operator--(A& ptr) { --ptr.Count; return ptr; } //后置++,-- A operator++(A& ptr,int) { A num; num=ptr; ++ptr.Count; return num; } A operator--(A& ptr,int) { A num; num=ptr; --ptr.Count; return num; } int main() { A a(100),b(100),c(100),d(100); (++a).show(); (b++).show(); (--c).show(); (d--).show(); return 0; } 結(jié)果: 運(yùn)算后結(jié)果為:101 運(yùn)算后結(jié)果為:100 運(yùn)算后結(jié)果為:99 運(yùn)算后結(jié)果為:100
??????如果大家還有不懂或者建議都可以發(fā)在評(píng)論區(qū),我們共同探討,共同學(xué)習(xí),共同進(jìn)步。謝謝大家! ?????????文章來源地址http://www.zghlxwxcb.cn/news/detail-478346.html
到了這里,關(guān)于運(yùn)算符重載的函數(shù)作為類的成員函數(shù)和友元函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!