freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[計(jì)算機(jī)]c課件第八講v-資料下載頁(yè)

2024-10-19 03:41本頁(yè)面
  

【正文】 t研究生: 39。\t39。 ()。 (數(shù)學(xué) ,160)。 (數(shù)學(xué) ,160)。 ps=amp。s。 psCalculate()。 cout本科生: 39。\t39。 psPrint()。 ps=amp。g。 psCalculate()。 cout研究生: 39。\t39。 psPrint()。 return 0} [例 ] 虛函數(shù)計(jì)算學(xué)分 Page 71 計(jì)算機(jī)基礎(chǔ)教研室 結(jié)果為 : 本科生:物理 80學(xué)時(shí) 5學(xué)分 研究生:物理 80學(xué)時(shí) 4學(xué)分 本科生:數(shù)學(xué) 160學(xué)時(shí) 10學(xué)分 研究生:數(shù)學(xué) 160學(xué)時(shí) 8學(xué)分 第一行學(xué)分是由 Student類的成員函數(shù) Calculate()計(jì)算。 第二行學(xué)分是由GradeStudent重新定義的Calculate()計(jì)算,它屏蔽了基類的同名函數(shù)。 第三行用的是指向 Student類的對(duì)象 s的指針,當(dāng)然用的是 Student類的Calculate()。 指針類型是指向基類的指針,但這里指針指向了派生類 GradeStudent的對(duì)象 g,按賦值兼容規(guī)則是準(zhǔn)許的,但只能用基類的成員,可實(shí)際上用了派生中新定義的 Calculate()。這就是虛函數(shù)體現(xiàn)的多態(tài)性 ,如果不是虛函數(shù),第四行輸出是 10學(xué)分。 Page 72 計(jì)算機(jī)基礎(chǔ)教研室 成員函數(shù)設(shè)置為虛函數(shù)的要點(diǎn): 1. 派生類中定義虛函數(shù)必須與基類中的虛函數(shù)同名外,還必須同參數(shù)表,同返回類型。否則被認(rèn)為是重載,而不是虛函數(shù)。如 基類中返回基類指針,派生類中返回派生類指針是允許的 ,這是一個(gè)例外。 2. 只有類的成員函數(shù)才能說(shuō)明為虛函數(shù)。這是因?yàn)樘摵瘮?shù)僅適用于有繼承關(guān)系的類對(duì)象。 3. 靜態(tài)成員函數(shù),是所有同一類對(duì)象共有,不受限于某個(gè)對(duì)象,不能作為虛函數(shù)。 4. 一個(gè)類對(duì)象的靜態(tài)和動(dòng)態(tài)構(gòu)造是相同的, 實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性時(shí),必須使用基類類型的指針變量或引用,使該指針指向該基類的不同派生類的對(duì)象,并通過(guò)該指針指向虛函數(shù),才能實(shí)現(xiàn)動(dòng)態(tài)的多態(tài)性。 虛函數(shù)的定義 Page 73 計(jì)算機(jī)基礎(chǔ)教研室 , 無(wú)映射關(guān)系,不能作為虛函數(shù)。 6. 析構(gòu)函數(shù)可定義為虛函數(shù),構(gòu)造函數(shù)不能定義虛函數(shù),因?yàn)樵谡{(diào)用構(gòu)造函數(shù)時(shí)對(duì)象還沒(méi)有完成實(shí)例化。 通常把析構(gòu)函數(shù)定義為虛函數(shù),實(shí)現(xiàn)撤消對(duì)象時(shí)的多態(tài)性。 7. 函數(shù)執(zhí)行速度要稍慢一些。為了實(shí)現(xiàn)多態(tài)性,每一個(gè)派生類中均要保存相應(yīng)虛函數(shù)的入口地址表,函數(shù)的調(diào)用機(jī)制也是間接實(shí)現(xiàn)。所以多態(tài)性總是要付出一定代價(jià),但通用性是一個(gè)更高的目標(biāo)。 8. 如果定義放在類外, virtual只能加在函數(shù)聲明前面,不能(再)加在函數(shù)定義前面。正確的定義必須不包括virtual。 虛函數(shù)的定義 Page 74 計(jì)算機(jī)基礎(chǔ)教研室 【 例 】 根據(jù)賦值兼容規(guī)則可以用基類的指針指向派 生類對(duì)象,如果由該指針撤銷派生類對(duì)象,則必須將析構(gòu)函數(shù)說(shuō)明為虛函數(shù),實(shí)現(xiàn)多態(tài)性,自動(dòng)調(diào)用派生類析構(gòu)函數(shù)。 通常 要求將類設(shè)計(jì)成通用的 ,無(wú)論其他程序員怎樣調(diào)用都必須保證不出錯(cuò),所以 必須把析構(gòu)函數(shù)定義為虛函數(shù) 。 下面把 【 例 】 析構(gòu)函數(shù)改造為虛函數(shù) class Person{ //數(shù)據(jù)成員略 public: virtual ~Person()。 //只需在此聲明一次 ,派生類的析構(gòu)函數(shù)全為虛函數(shù) }。 //其他成員函數(shù)略 虛函數(shù)的定義 Page 75 計(jì)算機(jī)基礎(chǔ)教研室 Person *pper4。 Student *pstu4=new Student。 //pstu4指向動(dòng)態(tài)建立的 student類對(duì)象 *pstu4=stu1。 //把 stu1的數(shù)據(jù)拷入 pstu4指向的對(duì)象 pstu4PrintStudentInfo()。 pper4=pstu4。 delete pper4。 //用基類指針撤銷派生類,動(dòng)態(tài)生成的對(duì)象必須顯式撤銷 在主函數(shù)中添加以下內(nèi)容: 通過(guò)在析構(gòu)函數(shù)中加顯示語(yǔ)句發(fā)現(xiàn)先調(diào) Student析構(gòu)函數(shù),后調(diào) Person析構(gòu)函數(shù)。 這里再次強(qiáng)調(diào) 動(dòng)態(tài)生成的對(duì)象必須顯式撤銷 。 虛函數(shù)的定義 Page 76 計(jì)算機(jī)基礎(chǔ)教研室 純虛函數(shù): 純虛函數(shù) ( pure virtual function)是指被標(biāo)明為不具體實(shí)現(xiàn)的虛擬成員函數(shù)。它用于這樣的情況:定義一個(gè)基類時(shí),會(huì)遇到無(wú)法定義基類中虛函數(shù)的具體實(shí)現(xiàn),其實(shí)現(xiàn)依賴于不同的派生類。 純虛函數(shù)的定義: virtual 返回類型 函數(shù)名(參數(shù)表) =0; 含有純虛函數(shù)的基類是不能用來(lái)定義對(duì)象的。純虛函數(shù)沒(méi)有實(shí)現(xiàn)部分,不能產(chǎn)生對(duì)象,所以含有純虛函數(shù)的類是 抽象類 。 純虛函數(shù) Page 77 計(jì)算機(jī)基礎(chǔ)教研室 1 定義純虛函數(shù)時(shí),不能定義虛函數(shù)的實(shí)現(xiàn)部分。即使是函數(shù)體為空也不可以,函數(shù)體為空就可以執(zhí)行,只是什么也不做就返回。但根本不能調(diào)用純虛函數(shù)。 2 “=0”表明程序員將不定義該函數(shù),函數(shù)聲明是為派生類保留一個(gè)位置。 “ =0”本質(zhì)上是將指向函數(shù)體的指針定為 NULL。 3 在派生類中必須有重新定義的純虛函數(shù)的函數(shù)體,這樣的派生類才能用來(lái)定義對(duì)象。 定義純虛函數(shù)的要點(diǎn): 純虛函數(shù) Page 78 計(jì)算機(jī)基礎(chǔ)教研室 【 例 】 學(xué)校對(duì)在冊(cè)人員進(jìn)行獎(jiǎng)勵(lì),依據(jù)是業(yè)績(jī)分,但是 業(yè)績(jī)分的計(jì)算方法只能對(duì)具體人員進(jìn)行 ,如學(xué)生,教師,行政人員,工人,算法都不同,所以可以將在冊(cè)人員類作為一個(gè)抽象類, 業(yè)績(jī)計(jì)算方法作為一個(gè)純虛函數(shù) 。 在主函數(shù)中全部用指向基類的指針來(lái)調(diào)用 業(yè)績(jī)分 基類定義 業(yè)績(jī)分 學(xué)生派生類定義 業(yè)績(jī)分 教師派生類定義 驗(yàn)證 主函數(shù) 純虛函數(shù) Page 79 計(jì)算機(jī)基礎(chǔ)教研室 class Person{ int MarkAchieve。 string Name。 public: Person(string name){ Name=name。 MarkAchieve=0。} void SetMark(int mark){MarkAchieve=mark。}。 virtual void CalMark()=0。 //CalMark()為純虛函數(shù) ,Person為抽象類 void Print(){ coutName的業(yè)績(jī)分為 :MarkAchieveendl。} }。 [例 ] 業(yè)績(jī)分的計(jì)算 基類定義: Page 80 計(jì)算機(jī)基礎(chǔ)教研室 class Student:public Person{ int credit,grade。 //學(xué)分和成績(jī) public: Student(string name,int cred,int grad) :Person(name){ credit=cred。 grade=grad。 } void CalMark() {SetMark(credit*grade)。 } }。 學(xué)生派生類定義: [例 ] 業(yè)績(jī)分的計(jì)算 Page 81 計(jì)算機(jī)基礎(chǔ)教研室 class Teacher:public Person{ int classhour,studnum。 //授課學(xué)時(shí)和學(xué)生人數(shù) public: Teacher(string name,int ch,int sn):Person(name){ classhour=ch。 studnum=sn。 } void CalMark() { int K=(studnum+15)/30。 //工作量系數(shù) ,30人一班 ,15人以下不開(kāi)課 switch(K){ case 1: SetMark(classhour*studnum)。break。 case 2: SetMark(classhour*(30+(studnum30)*8/10))。break。 case 3: SetMark(classhour*(30+24+(studnum60)*6/10))。break。 case 4: SetMark(classhour*(30+24+18+ (studnum90)*4/10))。break。 case 5: SetMark(classhour*(30+24+18+12+ (studnum120)*2/10))。break。 default: SetMark(classhour*(30+24+18+12+6+(studnum150)*1/10))。 } } }。 例 教師派生類定義: Page 82 計(jì)算機(jī)基礎(chǔ)教研室 int main(){ Person *pp。 Student s1(張成 ,20,80)。 Teacher t1(范英明 ,64,125),t2(李凱 ,80,85)。 pp=amp。s1。 ppCalMark()。 ppPrint()。 pp=amp。t1。 ppCalMark()。 ppPrint()。 pp=amp。t2。 ppCalMark()。 ppPrint()。 return 0。} [例 ] 業(yè)績(jī)分的計(jì)算 Page 83 計(jì)算機(jī)基礎(chǔ)教研室 【 例 】 用 虛函數(shù) 來(lái)實(shí)現(xiàn) 辛普生 法求函數(shù)的定積分。 純虛函數(shù) 純虛 函數(shù)實(shí)現(xiàn) 通用算法 : 辛普生法求定積分類 在派生類中加被積函數(shù): 驗(yàn)證主函數(shù) Page 84 計(jì)算機(jī)基礎(chǔ)教研室 class Simpson{。//Intevalue積分值, a積分下限, b積分上限 double Intevalue,a,b public: virtual double fun(double x)=0。 //被積函數(shù)聲明為純虛函數(shù) Simpson(double ra=0,double rb=0){a=ra。b=rb。Intevalue=0。} void Integrate(){ double dx。 int i。 dx=(ba)/2021。 Intevalue=fun(a)+fun(b)。 for(i=1。i2021。i+=2) Intevalue+=4*fun(a+dx*i)。 for(i=2。i2021。i+=2) Intevalue+=2*fun(a+dx*i)。 Intevalue*=dx/3。 } void Print(){cout積分值 =Intevalueendl。} }。 【 例 】 辛普生法求定積分類: Page 85 計(jì)算機(jī)基礎(chǔ)教研室 class A:public Simpson{ public: A(double ra,double rb):Simpson(ra,rb){ }。 double fun(double x){return sin(x) 。} }。 class B:public Simpson{ //B也可以說(shuō)明為由 A派生,更利于說(shuō)明動(dòng)態(tài)多態(tài)性 public: B(double ra,double rb):Simpson(ra,rb){ }。 double fun(double x){return exp(x) 。} }。 【 例 】 辛普生法求定積分 在派生類中加被積函數(shù): Page 86 計(jì)算機(jī)基礎(chǔ)教研室 int main(){ A a1(,)。 Simpson *s=amp。a1。 sIntegrate()。 //動(dòng)態(tài) B b1(,)。 ()。 //靜態(tài) sPrint()。 ()。 return 0。 } 在 VC++平臺(tái)上運(yùn)行例 。 【 例 】 辛普生法求定積分 2021/11/10 Question? 謝謝!
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1