C++之操作符重载和运算符重载
一、學(xué)習(xí)要點(diǎn):
1.類中定義的構(gòu)造器可以必須在類中聲明,但定義可以在類內(nèi)和類外.
2.插入器和吸取器的構(gòu)造類型必須輸入?yún)?shù)和輸出參數(shù)都含有對(duì)象,這樣可以不斷保證右插.
3.而且輸入輸出中都含有流的引用,因?yàn)榱骺康南到y(tǒng)托管,
4.輸入的參數(shù)為什么也為對(duì)象的引用,因?yàn)轭悓?duì)象占用內(nèi)存較大,引用傳遞時(shí),無(wú)需在棧內(nèi)存中開(kāi)辟空間以裝載臨時(shí)對(duì)象,也省去了復(fù)制的耗時(shí)過(guò)程,為了避免改變形參的內(nèi)容,還需配以const加以修飾。
5.函數(shù)參數(shù)為對(duì)象引用,可以不用在開(kāi)辟在棧中開(kāi)辟空間,也省去了類對(duì)象的復(fù)制時(shí)間,高效,但這樣是不安全的,容易改變類對(duì)象的值,安全起見(jiàn),在類對(duì)象前面加上const,既保證高效性,有保證安全性.
6.關(guān)于流引用的理解,重載輸入輸出操作符函數(shù),會(huì)修改操作你的流,而流是全局的,不是臨時(shí)變量,是系統(tǒng)托管的。如果不返回引用,第二次插入操作將會(huì)導(dǎo)致插入到那個(gè)臨時(shí)的流對(duì)象,而顯示的會(huì)是那個(gè)全局的流,所以就看不到b了.
7.一個(gè)類的成員函數(shù)想訪問(wèn)另一個(gè)類的成員變量,這個(gè)類的成員函數(shù)必須聲明為另一個(gè)類的友元函數(shù).
二、代碼實(shí)現(xiàn)
友元函數(shù)部分:
聲明部分
定義部分
istream& operator>>(istream& input,Complex &i){ input>>i.real>>i.image; return input; } ostream& operator<<(ostream& output,Complex &c){ output<<"("<<c.real<<"+"<<c.image<<"i"<<")"<<endl; return output;}可運(yùn)行版完整代碼:
#include<iostream> #include<stdlib.h> using namespace std; class Complex{ public:Complex():real(0),image(0){};//構(gòu)造器的函數(shù)定義是在類中,使用的是內(nèi)聯(lián)函數(shù)Complex(int r,int i):real(r),image(i){};//構(gòu)造器的函數(shù)定義是在類中,使用的是內(nèi)聯(lián)函數(shù)Complex(int r):real(r),image(0){};Complex operator+(Complex &c);friend istream& operator>>(istream&,Complex &i);//輸入輸出屬于另一個(gè)類的成員函數(shù)friend ostream& operator<<(ostream&,Complex &c); private:int real;int image; }; Complex Complex::operator+(Complex &c){return Complex(c.real+real,c.image+image); }istream& operator>>(istream& input,Complex &i){cout<<"please input real and image";input>>i.real>>i.image;//重載未完成之前,>>還是流的輸入函數(shù)return input; } ostream& operator<<(ostream& output,Complex &c){output<<"("<<c.real<<"+"<<c.image<<"i"<<")"<<endl;//重載未完成之前,還是流的輸出函數(shù)return output; } int main(){Complex c1,c2;Complex c3(1);cin>>c1>>c2;cout<<c1+c2<<endl;cout<<c3<<endl;system("pause");return 0; }三、代碼運(yùn)行結(jié)果
四、注意事項(xiàng):
1.C++中一切皆對(duì)象,對(duì)象引用不僅可以節(jié)省時(shí)間還有空間,為保證對(duì)象的安全,多采用在引用之前加const,變引用雙向傳遞為單向傳遞.
2.重載主要看函數(shù)的輸入?yún)?shù),而決定調(diào)用那個(gè)函數(shù),像上面的例子,<<中重載函數(shù)中又有<<不是遞歸調(diào)用,而重載函數(shù)中的<<操作對(duì)象發(fā)生了變化,調(diào)用的不是重載本身,調(diào)用的是正常的輸入函數(shù).
3.流類是系統(tǒng)托管.
總結(jié)
以上是生活随笔為你收集整理的C++之操作符重载和运算符重载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matlab中sign函数用法
- 下一篇: C++for循环中i++与++i的区别