大工秋《C語言程序設計》輔導資料十_第1頁
大工秋《C語言程序設計》輔導資料十_第2頁
大工秋《C語言程序設計》輔導資料十_第3頁
免費預覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、C/C+ 語言程序設計輔導資料十五主 題:課件第十九章 繼承與派生(二)學習時間 :2012年1月9日 1月15日內(nèi) 容 : 我們這周主要學習課件第十九章繼承與派生(二)的相關(guān)內(nèi)容,希望通過下 面的內(nèi)容能使同學們加深對本章相關(guān)知識點的理解。知識脈絡:1、類的繼承與派生2、類成員的訪問控制3、單繼承與多繼承4、派生類的構(gòu)造、析構(gòu)函數(shù)5、類成員的標識與訪問重點與難點:1、重點:類的繼承與派生,類成員的訪問控制。2、難點:單繼承與多繼承,派生類的構(gòu)造、析構(gòu)函數(shù),類成員標識與訪問。一、二義性問題1、相關(guān)知識 在多繼承時,基類與派生類之間,或基類之間出現(xiàn)同名成員時,將出現(xiàn)訪 問時的二義性(不確定性) ,

2、采用虛函數(shù)或支配(同名覆蓋)原則來解決。 當派生類從多個基類派生,而這些基類又從同一個基類派生,則在訪問此 共同基類中的成員時,將產(chǎn)生二義性,采用虛基類來解決。2、二義性問題舉例 class A public:void f();class Bpublic:void f();void g();class C: public A, piblic Bpublic:void g();void h();分析: 如果定義: C c1; 則 c1.f(); 具有二義性而c1.g();無二義性(同名覆蓋)3、二義性的解決方法 解決方法一:用類名來限定c1.A:f()或 c1.B:f() 解決方法二:同名覆蓋在

3、C中定義一個同名成員函數(shù)f(), f()再根據(jù)需要調(diào)用A:f()或B:f()4、同名覆蓋原則派生類覆蓋基類中的同名成員: 若未強行指名, 則使用派生類中的同名成員 如要訪問基類中被覆蓋的同名成員,應使用基類名限定。5、二義性問題舉例class Bpublic: int b; class B1: public Bprivate: int b1; class B2: public Bprivate: int b2; ;class C: public B1,public B2public : int f();private: int d;下面的訪問是二義性的:C c;c.bc.B:b下面是正確的:c

4、.B1:bc. B2:b二、虛基類1、相關(guān)知識 虛基類的引入:用于有共同基類的場合 定義:以virtual修飾說明基類,例:class B1:virtual public B 作用:主要用來解決多繼承時可能發(fā)生的對同一基類繼承多次而產(chǎn)生的二 義性問題。為最遠的派生類提供唯一的基類成員,而不重復產(chǎn)生多次拷貝 注意:在第一級繼承時就要將共同基類設計為虛基類。2、虛基類舉例class B private: int b;class B1 : virtual public B private: int b1;class B2 : virtual public B private: int b2;clas

5、s C : public B1, public B2 private: float d;下面的訪問是正確的:C d;d. b;3、虛基類的派生類對象存儲結(jié)構(gòu)示意圖4、虛基類及其派生類構(gòu)造函數(shù) 建立對象時所指定的類稱為最派生類。 虛基類的子對象是由最派生類的構(gòu)造函數(shù)通過調(diào)用虛基類的構(gòu)造函數(shù)進 行初始化的。 在整個繼承結(jié)構(gòu)中,直接或間接繼承虛基類的所有派生類,都必須在構(gòu)造 函數(shù)的成員初始化表中給出對虛基類的構(gòu)造函數(shù)的調(diào)用。如果未列出,貝憔 示調(diào)用該虛基類的缺省構(gòu)造函數(shù)。 在建立對象時,只有最派生類的構(gòu)造函數(shù)調(diào)用虛基類的構(gòu)造函數(shù),該派生 類的其它基類對虛基類構(gòu)造函數(shù)的調(diào)用被忽略。5、虛基類使用實例#

6、i nclude <iostream.h>class BO/聲明基類BOpublic:/ 外部接口int nV;void fun ()cout«"Member of B0"<<e ndl;class B1: virtual public B0 /B0 為虛基類,派生 B1 類public:/新增外部接口int nV1;#i nclude <iostream.h>class B0 /聲明基類B0public:/ 外部接口int nV;void fun ()cout<<"Member of B0"&l

7、t;<e ndl;class B1: virtual public B0 /B0 為虛基類,派生 B1 類public:/新增外部接口int nV1;三、本節(jié)例題1、編寫一個程序,輸入年、月,打印出該年該月的天數(shù)。 分析與解答:本題旨在考查學生對 switch 這一選擇結(jié)構(gòu)的掌握情況, 重點是對閏年的判 定,對含有 31 天月份的判定,對含有 30 天月份的判定。#include <iostream.h>void main() int year,mon,days,leap;cin>>year>>mon;switch(mon) case 1:case 3

8、:case 5:case 7:case 8:case 10:case 12:days=31;break(; 輸出 31天部分 )case 4:case 6:case 9:case 11:days=30;break(; 輸出 30 天部分 )case 2:if(year%400 = 0) leap=1;else if(year%4 = 0 && year%100 != 0)leap=1;else leap=0;if(leap) days=29;else days=28;(判斷閏年部分) coutvvyearvv 年” <<mon<<月的天數(shù)為:” <

9、<days<<endl;2、建立一個對象數(shù)組 ,內(nèi)放 5 個學生的數(shù)據(jù) (學號、成績 ),用指針指向數(shù)組首元 素,輸出第 1,3,5個學生的數(shù)據(jù)。 (注: 5 個學生的數(shù)據(jù)由編程者自行給定 ) 分析與解答:本題主要考查學生對對象數(shù)組、指針等綜合知識點運用的掌握情況。#include<iostream.h>using namespace std;class Studentpublic:Student(int n, float s):num(n),score(s)void display(); private: int num; float score; ; void Student:display() cout<<num<<“ ” <<score<<e; ndl int main( ) Student stud5= Student(101,78.5

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論