av在线观看网站免费,欧美成人aaa片一区国产精品,精品国产乱码久久久久久免费,麻豆果冻传媒2021精品传媒一区,国产精品自在欧美一区

電子文檔交易市場
安卓APP | ios版本
電子文檔交易市場
安卓APP | ios版本

c++語言程序設計第8講

39頁
  • 賣家[上傳人]:正仁
  • 文檔編號:187289903
  • 上傳時間:2021-07-26
  • 文檔格式:PPT
  • 文檔大小:188KB
  • 下載文檔到電腦,查找使用更方便

    3 金貝

    還剩頁未讀,繼續(xù)閱讀

    / 39 舉報 版權申訴 馬上下載
  • 文本預覽
  • 下載提示
  • 常見問題
    • 第八章 多態(tài)性 清華大學 鄭 莉 C+語言程序設計 1 C+語言程序設計清華大學 鄭莉 本章主要內容 l多態(tài)性 l運算符重載 l虛函數(shù) l純虛函數(shù) l抽象類 2 C+語言程序設計清華大學 鄭莉 多態(tài)性的概念 l多態(tài)性是面向對象程序設計的 重要特征之一 l多態(tài)性是指發(fā)出同樣的消息被 不同類型的對象接收時有可能導致完全 不同的行為 l多態(tài)的實現(xiàn): 函數(shù)重載 運算符重載 虛函數(shù) 3 C+語言程序設計清華大學 鄭莉 問題舉例復數(shù)的運算 class complex /復數(shù)類聲明 public: complex(double r=0.0,double i=0.0) / 構造函數(shù) real=r; imag=i; void display();/顯示復數(shù)的值 private: double real; double imag; ; 運算符重載 4 C+語言程序設計清華大學 鄭莉 問題舉例復數(shù)的運算 l用“+”、“-”能夠實現(xiàn)復數(shù)的加 減運算嗎? l實現(xiàn)復數(shù)加減運算的方法 重載“+”、“-”運算符 運算符重載 5 C+語言程序設計清華大學 鄭莉 運算符重載的實質 l運算符重載是對已有的運算符賦予 多重含義 l必要性 C+中預定義的運 算符其運算對象只能是基本數(shù)據(jù)類 型,而不適用于用戶自定義類型( 如類) l實現(xiàn)機制 將指定的運算表達 式轉化為對運算符函數(shù)的調用,運 算對象轉化為運算符函數(shù)的實參。

      編譯系統(tǒng)對重載運 算符的選擇,遵循函數(shù)重載的選擇 原則 運算符重載 6 C+語言程序設計清華大學 鄭莉 運算符重載 規(guī)則和限制 l可以重載C+中除下列運算符 外的所有運算符: . .* : ?: l只能重載C+語言中已有的運 算符,不可臆造新的 l不改變原運算符的優(yōu)先級和結 合性 l不能改變操作數(shù)個數(shù) l經(jīng)重載的運算符,其操作數(shù)中 至少應該有一個是自定義類型 7 C+語言程序設計清華大學 鄭莉 兩種形式 l重載為類成員函數(shù) l重載為非成員函數(shù)(通常為友 元函數(shù)) 運算符重載 8 C+語言程序設計清華大學 鄭莉 運算符函數(shù) l聲明形式 函數(shù)類型 operator 運算符(形參) . l重載為類成員函數(shù)時 參數(shù)個數(shù)=原操作數(shù)個數(shù)-1(后置+、-除外 ) l重載為友元函數(shù)時 參數(shù)個數(shù)=原操作 數(shù)個數(shù),且至少應該有一個自定義類型的形參 運算符重載 9 C+語言程序設計清華大學 鄭莉 運算符成員函數(shù)的設計 l雙目運算符 B 如果要重載 B 為類 成員函數(shù),使之能夠實現(xiàn)表達式 oprd1 B oprd2,其中 oprd1 為 A 類對象,則 B 應被重載為 A 類的成員函數(shù),形參類型應該是 oprd2 所屬的類型。

      經(jīng)重載后,表達式 oprd1 B oprd2 相當于 oprd1.operator B(oprd2) 運算符重載 10 C+語言程序設計清華大學 鄭莉 運算符重載 例 8-1 將“+”、“-”運算重載 為復數(shù)類的成員函數(shù) l 規(guī)則: 實部和虛部分別 相加減 l 操作數(shù): 兩個操作數(shù)都是 復數(shù)類的對象 11 #include using namespace std; class complex/復數(shù)類聲明 public:/外部接口 complex(double r=0.0,double i=0.0)real=r;imag=i; /構造函數(shù) complex operator + (complex c2); /+重載 為成員函數(shù) complex operator - (complex c2); /-重載為 成員函數(shù) void display();/輸出復數(shù) private:/私有數(shù)據(jù)成員 double real;/復數(shù)實部 double imag;/復數(shù)虛部 ; 1212 complex complex: operator +(complex c2) /重載函數(shù)實現(xiàn) complex c; c.real=c2.real+real; c.imag=c2.imag+imag; return complex(c.real,c.imag); 1313 complex complex: operator -(complex c2) /重載函數(shù)實現(xiàn) complex c; c.real=real-c2.real; c.imag=imag-c2.imag; return complex(c.real,c.imag); 1414 void complex:display() cout(real,imag)endl; int main() /主函數(shù) complex c1(5,4),c2(2,10),c3; /聲明復數(shù) 類的對象 coutc1=; c1.display(); coutc2=; c2.display(); c3=c1-c2;/使用重載運算符完成復數(shù)減 法 coutc3=c1-c2=; c3.display(); c3=c1+c2; /使用重載運算符完成復數(shù)加 法 coutc3=c1+c2=; c3.display(); 1515 程序輸出的結果為: c1=(5,4) c2=(2,10) c3=c1-c2=(3,-6) c3=c1+c2=(7,14) 1616 C+語言程序設計清華大學 鄭莉 運算符成員函數(shù)的設計 l前置單目運算符 U 如果要重載 U 為 類成員函數(shù),使之能夠實現(xiàn)表 達式 U oprd,其中 oprd 為A 類對象,則 U 應被重載為 A 類的成員函數(shù),無形參。

      經(jīng)重載后, 表達式 U oprd 相當于 oprd.operator U() 運算符重載 17 C+語言程序設計清華大學 鄭莉 運算符成員函數(shù)的設計 l后置單目運算符 +和- 如果要重載 + 或-為類成員函數(shù),使之能夠 實現(xiàn)表達式 oprd+ 或 oprd- - ,其中 oprd 為A類對象,則 +或- 應被重載為 A 類的成 員函數(shù),且具有一個 int 類型 形參 經(jīng)重載后,表達 式 oprd+ 相當于 oprd.operator +(0) 運算符重載 18 C+語言程序設計清華大學 鄭莉 例8-2 l運算符前置+和后置+重載為 時鐘類的成員函數(shù) l前置單目運算符,重載函數(shù)沒 有形參,對于后置單目運算符,重載函 數(shù)需要有一個整型形參 l操作數(shù)是時鐘類的對象 l實現(xiàn)時間增加1秒鐘 運算符重載 19 /8_2.cpp #include using namespace std; class Clock/時鐘類聲明 public:/外部接口 Clock(int NewH=0, int NewM=0, int NewS=0); void ShowTime(); Clock /前置單目 運算符重載 Clock operator +(int); /后置單目 運算符重載 private:/私有數(shù)據(jù)成員 int Hour,Minute,Second; ; 2020 Clock if(Second=60) Second=Second-60; Minute+; if(Minute=60) Minute=Minute-60; Hour+; Hour=Hour%24; return *this; 2121 /后置單目運算符重載 Clock Clock:operator +(int) /注意形參表中的整型參數(shù) Clock old=*this; +(*this); return old; 2222 /其它成員函數(shù)的實現(xiàn)略 int main() Clock myClock(23,59,59); coutFirst time output:; myClock.ShowTime(); coutShow myClock+:; (myClock+).ShowTime(); coutShow +myClock:; (+myClock).ShowTime(); 2323 程序運行結果為: First time output: 23:59:59 Show myClock+: 23:59:59 Show +myClock: 0:0:1 2424 C+語言程序設計清華大學 鄭莉 非成員運算符函數(shù)的設計 l如果需要重載一個運算符,使 之能夠用于操作某類對象的私有成員, 可以此將運算符重載為該類的非成員( 通常為友元)函數(shù)。

      l函數(shù)的形參代表依自左至右次 序排列的各操作數(shù) l后置單目運算符 +和-的重載 函數(shù),形參列表中要增加一個int,但不 必寫形參名 運算符重載 25 C+語言程序設計清華大學 鄭莉 非成員運算符函數(shù)的設計 l雙目運算符 B重載后, 表達式oprd1 B oprd2 等同于operator B(oprd1,oprd2 ) l前置單目運算符 B重載后, 表達式 B oprd 等同于operator B(oprd ) l后置單目運算符 +和-重載后 , 表達式 oprd B 等同于operator B(oprd,0 ) 運算符重載 26 C+語言程序設計清華大學 鄭莉 例8-3 l將+、-(雙目)重載為復數(shù)類 的友元函數(shù) l兩個操作數(shù)都是復數(shù)類的對象 運算符重載 27 #include using namespace std; class complex/復數(shù)類聲明 public:/外部接口 complex(double r=0.0,double i=0.0) real=r; imag=i; /構造函數(shù) friend complex operator + (complex c1,complex c2);/運算符+重載為友元函數(shù) friend complex operator - (complex c1,complex c2);/運算符-重載為友元函數(shù) void display();/顯示復數(shù)的值 private:/私有數(shù)據(jù)成員 double real; double imag; ; 2828 complex operator +(complex c1,complex c2) /運算符重載友元函數(shù)實現(xiàn) return complex(c2.real+c1.real, c2.imag+c1.imag); complex operator -(complex c1,complex c2) /運算符重載友元函數(shù)實現(xiàn) return complex(c1.real-c2.real, c1.imag-c2.imag); / 其他函數(shù)和主函數(shù)同例8-1 2929 C+語言程序設計清華大學 鄭莉 靜態(tài)綁定與動態(tài)綁定 l綁定 程序自身彼此關 聯(lián)的過程,確定程序中的操作 調用與執(zhí)行該操作的代碼間的 關系。

      l靜態(tài)綁定 綁定過程出現(xiàn)在 編譯階段,用對象名或者類名 來限定要調用的函數(shù) l動態(tài)綁定 綁定過程工作在 程序運行時執(zhí)行,在程序運行 時才確定將要調用的函數(shù) 30 #include using namespace std; class Point public: Point(double i, double j) x=i; y=j; double Area() const return 0.0; private: double x, y; ; class Rectangle:public Point public: Rectangle(double i, double j, double k, double l); double Area() const return w*h; private: double w,h; ; 靜態(tài)綁定例 3131 Rectangle:Rectangle(double i, double j, double k, double l) :Point(i,j) w=k; h=l; void fun(Point int main() Rectangle rec(3.0, 5.2, 15.0, 25.0); fun(rec); 運行結果: Area=0 3232 #include using namespace std; class Point public: Po。

      點擊閱讀更多內容
    關于金鋤頭網(wǎng) - 版權申訴 - 免責聲明 - 誠邀英才 - 聯(lián)系我們
    手機版 | 川公網(wǎng)安備 51140202000112號 | 經(jīng)營許可證(蜀ICP備13022795號)
    ?2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.