版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、10 多載函數(shù),10.1多載概論10-210.1.1 多載一般函數(shù)10-210.1.2 多載成員函數(shù)10-310.1.3 多載建立者函數(shù) 10-510.2多載運算符號10-810.2.1 多載運算符號限制 10-910.2.2 運算符號函數(shù)10-1010.2.3 多載 >> 運算符號 10-1010.2.4 多載 << 運算符號 10-1310.2.5 多
2、載雙運算元符號 10-1610.2.6 多載單運算元符號 10-20,10.2.7 多載前置運算符號 10-2310.2.8 多載後置運算符號 10-2310.3轉(zhuǎn)換型態(tài)10-2610.3.1 基本型態(tài)轉(zhuǎn)基本型態(tài)10-2610.3.2 基本型態(tài)轉(zhuǎn)類別型態(tài)10-2710.3.3 類別型態(tài)轉(zhuǎn)基本型態(tài)10-2910.3.4 類別型態(tài)轉(zhuǎn)類別型態(tài)10-31,10.1 多載概論,多載(overloa
3、ding)就是重複定義多個相同名稱的函數(shù),但這些函數(shù)的功能不完全相同。所以多載函數(shù)的情況包括:(1)接收不同數(shù)量的參數(shù),(2)傳遞不同型態(tài)的參數(shù),(3)傳回不同型態(tài)的參數(shù)。,10.1.1 多載一般函數(shù),多載(overloading)就是重複定義多個相同名稱的函數(shù),但這些函數(shù)的功能不完全相同。 範(fàn)例int area(int length, int width);//第一個area{return length * w
4、idth;}範(fàn)例待續(xù)……,10.1.1 多載一般函數(shù) (續(xù)),範(fàn)例續(xù)double area(int radius)//第二個area函數(shù){return 3.1415926 * pow(radius, 2);}int main(){int rectangleArea = area(3, 5);//呼叫第一個area函數(shù)double circleArea = area(5);//呼叫第二
5、個area函數(shù)return 0;//正常結(jié)束程式},10.1.2 多載成員函數(shù),多載函數(shù)的情況包括:(1)接收不同數(shù)量的參數(shù),(2)傳遞不同型態(tài)的參數(shù),(3)傳回不同型態(tài)的參數(shù)。範(fàn)例一class Cuboid//宣告長方體類別{private:int length;//Cuboid的資料成員1int width;//Cuboid的資料成員2int height;//Cub
6、oid的資料成員3,10.1.2 多載成員函數(shù) (續(xù)),範(fàn)例續(xù)public:int area() { //錯誤,Multiple declarationreturn length * width;}int area() { //錯誤,Multiple declarationreturn 2 * (length * width + width * height + h
7、eight * length);}};,10.1.2 多載成員函數(shù) (續(xù)),範(fàn)例二class Cuboid//宣告長方體類別{int length;//Cuboid的資料成員1int width;//Cuboid的資料成員2int height;//Cuboid的資料成員3public:void setSide(int l, int w)//設(shè)定長方形邊長{
8、length = l; width = w; height = 0;},10.1.2 多載成員函數(shù) (續(xù)),範(fàn)例續(xù)void setSide(int l, int w, int h)//設(shè)定長方體邊長{length = l; width = w; height = h;}int area()//計算長方體表面積函數(shù){return 2 * (length * width
9、+ width * height + height * length);}};,10.1.3 多載建立者函數(shù),在類別中可以多載(overload)建立者函數(shù),也就是定義多個建立者函數(shù),每個建立者函數(shù)可含有不同個數(shù)的參數(shù)。 範(fàn)例class Timer{int seconds;public:Timer() {//定義無參數(shù)建立者seconds = 0;}Timer(
10、int s) {//定義整數(shù)參數(shù)建立者seconds = s;},10.1.3 多載建立者函數(shù) (續(xù)),範(fàn)例續(xù)Timer(char *t) {//定義指標參數(shù)建立者seconds = atoi(t);}};int main(){char str[20] = "250";Timer t1;//t1.seconds = 0Timer t2(10);
11、//t2.seconds = 10Timer t3(str);//t3.seconds = 250return 0;//正常結(jié)束程式},10.2 多載運算符號,在C++ 語言中,> 運算符號可以配合cin敘述作為字串輸入運算符號,也可以作為右移位元運算符號。這就是運算符號多載(operator overloading)。 運算符號多載(operator overloading),就是要再定義這些運
12、算符號,使它們也能接受使用者自定的資料型態(tài)與物件。,10.2.1 多載運算符號限制,可以被多載的運算符號包括表10.1算術(shù)運算符號、表10.2關(guān)係與邏輯運算符號、表10.3位元運算符號、表10.4指定運算符號、表10.5特殊運算符號。表中同時提供這些運算符號在C++ 資料庫中的內(nèi)建功能、範(fàn)例與說明,設(shè)計師為自定資料型態(tài)多載這些符號時,必須保持它們原來的功能,否則將會造成語法錯誤訊息。例如,將 + 多載為減法運算符號,編譯時會出現(xiàn)語
13、法錯誤訊息。,10.2.2 運算符號函數(shù),運算符號函數(shù)可以是類別成員函數(shù)或非類別成員函數(shù)。當(dāng)非成員函數(shù)或非friend函數(shù)要存取私用區(qū)(private)或保護區(qū)(protected)的資料時,必須先呼叫公用區(qū)(public)的set或get成員函數(shù),如此將會降低程式的性能。所以為了得到更好的性能,可使用friend函數(shù),friend雖然不是類別成員函數(shù)但仍可直接存取私用區(qū)(private)或保護區(qū)(protected)的資料。,10
14、.2.3 多載 >> 運算符號,friend istream &operator>>(istream&傳回參數(shù), 類別名稱 物件參數(shù))範(fàn)例class Test{private:int a, b;//定義private變數(shù)public:Test() {a = b = 0; },10.2.3 多載 >> 運算符號 (續(xù)),範(fàn)例續(xù)
15、Test(int n, int m) {a = n; b = m; }};int main(){Test s1;cin >> s1;//錯誤不能輸入Test型態(tài)資料cout << s1;//錯誤不能輸出Test型態(tài)資料return 0;//正常結(jié)束程式},10.2.4 多載 << 運算符號,friend ostream &ope
16、rator<<(ostream&傳回參數(shù), 類別名稱 物件參數(shù))範(fàn)例class Test{private:int a, b;//定義private變數(shù)public:Test() {a = b = 0; },10.2.4 多載 << 運算符號 (續(xù)),範(fàn)例續(xù)Test(int n, int m) {a = n; b = m; }friend
17、 istream& operator>>(istream& in, Test& obj);friend ostream& operator>(istream& in, Test& obj){cout > obj.a >> obj.b;return in;},10.2.4 多載 << 運算符號 (續(xù)),範(fàn)例續(xù)os
18、tream& operator> s1;//若輸入2 3cout << s1;//則輸出2 3return 0;//正常結(jié)束程式},10.2.5 多載雙運算元符號,傳回型態(tài) operator運算符號(類別型態(tài) 物件參數(shù))傳回型態(tài) operator運算符號(類別1 物件1, 類別2 物件2)範(fàn)例class Test{int a, b;//定義priv
19、ate變數(shù)public:Test() { a = b = 0; }Test(int n, int m) { a = n; b = m; }Test operator+(Test);//宣告多載 + 號};,10.2.5 多載雙運算元符號 (續(xù)),範(fàn)例一續(xù)Test Test::operator+(Test obj) {//定義多載 + 號Test temp;temp.a = a + o
20、bj.a;//a=s1.a, obj.a=s2.atemp.b = b + obj.b; //b=s1.b, obj.b=s2.breturn temp;}int main() {Test s1(2, 3), s2(4, 5), s3;s3 = s1 + s2;//s1.operator+(s2)return 0;//正常結(jié)束程式},10.2.5 多載雙運算元符號 (續(xù)),
21、範(fàn)例二class Test {int a;//定義private變數(shù)public:Test() { a = 0; }Test(int n) { a = n; }bool operator>(Test);//宣告多載 > 號};bool Test::operator>(Test obj) {//定義多載 > 號if (a > obj.a)
22、return true;elsereturn false;},10.2.5 多載雙運算元符號 (續(xù)),範(fàn)例二續(xù)int main(){Test s1(2), s2(5);if (s1 > s2)//呼叫多載 > 函數(shù)cout s2";elsecout << "s1 < s2";return 0;//
23、成功結(jié)束程式},10.2.6 多載單運算元符號,傳回型態(tài) operator運算符號()傳回型態(tài) operator運算符號(類別型態(tài) 物件參數(shù))範(fàn)例class Test{int a;//定義private變數(shù)public:Test(int n) { a = n; }bool operator !();//宣告多載 ! 號};,10.2.6 多載單運算元符號 (續(xù)),範(fàn)例續(xù)
24、bool Test::operator!() {//定義多載 ! 號if (a != 0) {return true;}else {return false;}}int main() {Test s1(5);if (!s1){cout << "s1 != 0"; }//呼叫多載 ! 符號函數(shù)else {cout << "s1 == 0&
25、quot;;}return 0;//正常結(jié)束程式},10.2.7 多載前置運算符號,傳回型態(tài) operator運算符號()範(fàn)例class Test{int a, b;//定義private變數(shù)public:Test() { a = b = 0; }Test(int n, int m) { a = n; b = m; }Test operator++();//宣告前置
26、++x 號};,10.2.7 多載前置運算符號 (續(xù)),範(fàn)例續(xù)Test Test::operator++()//定義前置 ++x 號{return Test(++a, ++b);}int main(){Test s1(2, 3), s2;s2 = ++s1;//等於s1.operator++()return 0;//正常結(jié)束程式},10.2.8 多載後置運算符號,傳
27、回型態(tài) operator運算符號(int)範(fàn)例class Test{int a, b;//定義private變數(shù)public:Test() { a = b = 0; }Test(int n, int m) { a = n; b = m; }Test operator++(int);//宣告後置 x++ 號};,10.2.8 多載後置運算符號 (續(xù)),範(fàn)例續(xù)Test Test::op
28、erator++(int)//定義後置 x++ 號{return Test(a++, b++);}int main(){Test s1(2, 3), s2;s2 = s1++; //s2.a=s1.a=2, s2.b=s1.b=3//s1.a=++s1.a=3, s1.b=++s1.b=4return 0;//正常結(jié)束程式},10.3 轉(zhuǎn)換型態(tài),10.3.1 基本型態(tài)轉(zhuǎn)
29、基本型態(tài),float型態(tài)的fracfeet轉(zhuǎn)成int型態(tài)的feetint feet;float fracfeet = 3.280833 * 3.5;feet = int(fracfeet);//float轉(zhuǎn)成intint型態(tài)的fracfeet轉(zhuǎn)成float型態(tài)的fracfeetint feet;float fracfeet = inch / 10;fracfeet = float(feet);//feet
30、從int轉(zhuǎn)為float,10.3.2 基本型態(tài)轉(zhuǎn)類別型態(tài),float型態(tài)的資料轉(zhuǎn)成Distance型態(tài)const float MTF = 3.280833f;class Distance//宣告Distance類別{int feet;float inch;public:Distance (int f, float in) //宣告一參數(shù)建立者{feet = f; inch =
31、in;},10.3.2 基本型態(tài)轉(zhuǎn)類別型態(tài) (續(xù)),範(fàn)例續(xù)Distance (float meter) { //宣告二參數(shù)建立者float fracfeet = MTF * meter;feet = (int)fracfeet;inch = 10 * (fracfeet - feet);}};int main() {Distance d(0, 0);//呼叫二個參數(shù)的建
32、立者float m = 3.5;//m = 3.5 md = m;//呼叫一個參數(shù)的建立者return 0;//正常結(jié)束程式},10.3.3 類別型態(tài)轉(zhuǎn)基本型態(tài),Distance型態(tài)的資料轉(zhuǎn)成float型態(tài)範(fàn)例const float MTF = 3.280833;class Distance//宣告Distance類別{int feet;float inch;
33、public:Distance (int f, float in)//Distance類別建立者{feet = f; inch = in;},10.3.3 類別型態(tài)轉(zhuǎn)基本型態(tài) (續(xù)),範(fàn)例續(xù)operator float() {//多載float型態(tài)函數(shù)float fracfeet = inch / 10;fracfeet = float(feet);return fr
34、acfeet / MTF;}};int main() {Distance d(2, 3);//呼叫Distance建立者float m;//宣告浮點數(shù)變數(shù)mm = d;//呼叫operator float函數(shù)return 0;//正常結(jié)束程式},10.3.4 類別型態(tài)轉(zhuǎn)類別型態(tài),Polar型態(tài)的資料轉(zhuǎn)成Cartesian型態(tài) class Cartesian
35、{//宣告 Cartesian 類別double x;double y;public:Cartesian () {x = y = 0.0;}};class Polar {//宣告Polar類別double radius;double angle;public:Polar(double r, double a){ radius = r; angle = a; },10
36、.3.4 類別型態(tài)轉(zhuǎn)類別型態(tài) (續(xù)),範(fàn)例續(xù)operator Cartesian() {//多載Cartesian函數(shù)double xx, yy;xx = radius * cos(angle);yy = radius * sin(angle);return Cartesian(xx, yy);}};int main() {Polar p(2.0, 35.0); //
37、建立極座標p點位置Cartesian c; //建立平面座標cc = p; //呼叫Cartesian函數(shù)return 0;//正常結(jié)束程式},10.3.4 類別型態(tài)轉(zhuǎn)類別型態(tài) (續(xù)),Polar型態(tài)的資料轉(zhuǎn)成Cartesian型態(tài)範(fàn)例class Polar//宣告Polar類別{double radius;double angle;public:Po
38、lar(double r, double a) { radius = r; angle = a; }double getr() {return radius;}double geta() {return angle;}};,10.3.4 類別型態(tài)轉(zhuǎn)類別型態(tài) (續(xù)),class Cartesian {//宣告Cartesian類別double x;double y;public:Cartesi
39、an() {x = y = 0.0;}Cartesian(double a, double b) {x = a; y = b;}Cartesian operator = (Polar p) {//定義多載 = 號函數(shù)double r = p.getr();double a = p.geta();x = r * cos(a);y = r * sin(a);return Cartesia
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《 冪函數(shù) 》12張ppt
- 12.反比例函數(shù)
- 三角函數(shù)課件12
- 12二次函數(shù)最值問題
- 復(fù)變函數(shù)課件ch7 12
- 多載波傳輸技術(shù).pdf
- 銳角三角函數(shù)課件12
- 12一致收斂函數(shù)列與函數(shù)項級數(shù)級數(shù)的性質(zhì)
- 高三一輪復(fù)習(xí)數(shù)學(xué)12函數(shù)及其表示
- 高三一輪復(fù)習(xí)數(shù)學(xué)12函數(shù)及其表示
- 多載波及其多載波CDMA系統(tǒng)中的關(guān)鍵技術(shù)研究.pdf
- 密集多載波ebpsk脈沖雷達
- 高考專題練專題12函數(shù)的應(yīng)用word版含答案
- 多載頻相位編碼信號的研究.pdf
- 考點跟蹤訓(xùn)練12一次函數(shù)及其圖象
- 第12講 二次函數(shù)的圖象與性質(zhì)
- 多載波通信技術(shù)研究.pdf
- 多載體隱寫技術(shù)研究.pdf
- 多載體信息隱藏技術(shù)研究.pdf
- 快速卷積多載波傳輸方法研究.pdf
評論
0/150
提交評論