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

正文內容

cnet程序設計(中)ppt(編輯修改稿)

2025-03-20 13:33 本頁面
 

【文章內容簡介】 se3....z=getz()endl。 coutDerived..d=dendl。 } void main(){ Derived obj。 (1)。 (2)。 (3)。 (4)。 ()。 } 多繼承 下的二義性 ? 在多繼承方式下,派生類繼承了多個基類的成員,當兩個不同基類擁有同名成員時,容易產生名字沖突問題。 【 例 512】 類 A和類 B是 MI的基類,它們都有一個成員函數(shù) f,在類 MI中就有通過繼承而來的兩個同名成員函數(shù) f。 // includeiostream using namespace std。 class A { public: voidf(){ coutFrom Aendl。} }。 class B { public: void f() { coutFrom Bendl。} }。 class MI: public A, public B { public: void g(){ coutFrom MIendl。 } }。 void main(){ MI mi。 ()。 //錯誤 ::f()。 //正確 } 多繼承的 構造函數(shù)與析構函數(shù) ? 派生類必須負責為每個基類的構造函數(shù)提供初始化參數(shù),構造的方法和原則與單繼承相同。 ? 構造函數(shù)的調用次序仍然是先基類,再對象成員,然后才是派生類的構造函數(shù)。 ? 基類構造函數(shù)的調用次序與它們在被繼承時的聲明次序相同,與它們在派生類構造函數(shù)的初始化列表中的次序沒有關系。 ? 多繼承方式下的析構函數(shù)調用次序仍然與構造函數(shù)的調用次序相反。 【 例 513】 類 Base Base BaseDerived的繼承關系如圖所示,驗證其構造函數(shù)和析構函數(shù)的調用次序。 多繼承的構造 函數(shù)與析構函數(shù) 引入的原因重復基類 派生類間接繼承同一基類使得間接基類( Person)在派生類中有多份拷貝,引發(fā)二義性。 DeptHead Faculty Person name … Administrator Person name … 繼擬 繼承 ? 虛擬基類在派生類中只存在一份拷貝,解決了基類數(shù)據成員的二義性問題 引入的 原因重復 基類 虛擬繼承 virtual inheritance的定義 –語法 ? class derived_class : virtual […] base_class –虛基類 virtual base class ? 被虛擬繼承的基類 ? 在其所以的派生類中,僅出現(xiàn)一次 虛擬 繼承的實現(xiàn) class A { public: void vf() { coutI e from class Aendl。 } }。 class B: public A{}。 class C: public A{}。 class D: public B, public C{}。 void main() { D d。 ()。 // error } A B C D Vf() Vf() Vf() ::Vf() ::Vf() A Vf() 【 例 514】 類 A是類 B、 C的虛基類 , 類 D從類 B、 C繼承 ,在類 D中調用基類 A的成員會產生二義性 。 class A { public: void vf() { coutI e from class Aendl。 } }。 class B: virtual public A{}。 class C: virtual public A{}。 class D: public B, public C{}。 void main() { D d。 ()。 // okay } A B C D Vf() Vf() Vf() A::Vf() 將 【 例 514】 改為虛擬繼承不會產生二義性 。 虛擬繼承的構造次序 –虛基類的初始化與一般的多重繼承的初始化在語法上是一樣的,但構造函數(shù)的調用順序不同; –若基類由虛基類派生而來,則派生類必須提供對間接基類的構造(即在構造函數(shù)初始列表中構造虛基類, 無論此虛基類是直接還是間接基類 ) –調用順序的規(guī)定: ? 先調用虛基類的構造函數(shù),再調用非虛基類的構造函數(shù) ? 若同一層次中包含多個虛基類 ,這些虛基類的構造函數(shù)按它們的說明的次序調用 ? 若虛基類由非基類派生而來 ,則仍然先調用基類構造函數(shù) ,再調用派生類構造函數(shù) 【 例 515】 虛基類的執(zhí)行次序分析。 // include iostream using namespace std。 class A { int a。 public: A(){ coutConstructing Aendl。 } }。 class B { public: B(){ coutConstructing Bendl。} }。 虛擬 繼承的實現(xiàn) class B1:virtual public B ,virtual public A{ public: B1(int i){ coutConstructing B1endl。 } }。 class B2:public A,virtual public B { public: B2(int j){ coutConstructing B2endl。 } }。 class D: public B1, public B2 { public: D(int m,int n): B1(m),B2(n){ coutConstructing Dendl。 } A a。 }。 void main(){ D d(1,2)。 } 虛基類由最終派生類初始化 – 在沒有虛擬繼承的情況下,每個派生類的構造函數(shù)只負責其直接基類的初始化。但在虛擬繼承方式下,虛基類則由最終派生類的構造函數(shù)負責初始化。 – – 在虛擬繼承方式下,若最終派生類的構造函數(shù)沒有明確調用虛基類的構造函數(shù),編譯器就會嘗試調用虛基類不需要參數(shù)的構造函數(shù)(包括缺省、無參和缺省參數(shù)的構造函數(shù)),如果沒找到就會產生編譯錯誤。 虛擬 繼承的實現(xiàn) 【 例 516】 類 A是類 B、 C的虛基類,類 ABC從 B、 C派生,是繼承結構中的最終派生類,它負責虛基類 A的初始化。 // include class A { int a。 public: A(int x) { a=x。 coutVirtual Bass A...endl。 } }。 class B:virtual public A { public: B(int i):A(i){ coutVirtual Bass B...endl。 } }。 class C:virtual public A{ int x。 public: C(int i):A(i){ coutConstructing C...endl。 x=i。 } }。 class ABC:public C, public B { public: ABC(int i,int j,int k):C(i),B(j),A(i) //L1,這里必須對 A進行初始化 { coutConstructing ABC...endl。 } }。 void main(){ ABC obj(1,2,3)。 } 關系 ? 基類對象與派生類對象之間存在賦值相容性。包括以下幾種情況: –把派生類對象賦值給基類對象。 –把派生類對象的地址賦值給基類指針。 –用派生類對象初始化基類對象的引用。 ? 反之則不行 ,即不能把基類對象賦值給派生類對象;不能把基類對象的地址賦值給派生類對象的指針;也不能把基類對象作為派生對象的引用。 【 例 517】 把派生類對象賦值給基類對象的例子。 // include iostream using namespace std。 class A { int a。 public: void setA(int x){ a=x。 } int getA(){ return a。} }。 class B:public A{ int b。 public: void setB(int x){ b=x。 } int getB(){ return b。} }。 void f1(A a, int x){ (x)。 } void f2(A *pA, int x){ pAsetA(x)。 } void f3(A amp。rA, int x){ (x)。 } void main(){ A a1,*pA。 B b1,*pB。 (1)。 (2)。 a1=b1。 cout()endl。 cout()endl。 (10)。 cout()endl。 cout()endl。 pA=amp。b1。 pAsetA(20)。 coutpAgetA()endl。 cout()endl。 A amp。ra=b1。 (30)。 coutpAgetA()endl。 cout()endl。 (7)。 cout()endl。 f1(b1,100)。 cout()endl。 f2(amp。b1,200)。 cout()endl。 f3(b1,300)。 cout()endl。 } 類對象的關系 ? 說明: ? ① 不論以哪種方式把派生類對象賦值給基類對象,都只能訪問到派生類對象中的基類子對象部份的成員,不能訪問派生類的自定義成員。 ? ②只能把派生類對象賦值給基類對象,不能把基類對象賦值給派生類對象。 類對象的關系 ? 繼承與組合(也稱合成)是 C++實現(xiàn)代碼重用的兩種主要方法。通過繼承,派生類可以獲得基類的程序代碼,從而達到代碼重用的目的。而組合則體現(xiàn)了類之間的另一種關系,是指一個類可以包容另外的類,即用其他類來定義它的對象成員。 ? 繼承關系常被稱為“ Isa‖關系,即兩個類之間若存在 Isa關系,就可以用繼承來實現(xiàn)它。比如,水果和梨,水果和蘋果,它們就具有 Isa關系。因為梨是水果,蘋果也是水果,所以梨和蘋果都可以從水果繼承,獲得所有水果都具有的通用特征。 ? 組合常用于描述類之間的“ Hasa‖關系,即一個類擁有另外一些類。比如,圖書館有圖書,汽車有發(fā)動機、車輪胎、座位等,計算機有CPU、存儲器、顯示器等,這些都可以用類的組合關系來實現(xiàn)。 繼承與組合 ? 【 例 518】 設計一個成績單管理的程序 。 其中包括學生信息 , 如姓名 、 身高 、 性別 、 學號 、 專業(yè)等 , 學生學習某門課程后將得到一個成績 , 相關的信息有課程名稱 、 課程編號學分和成績等 。 繼承與組合 經過抽象與繼承,構造出圖所示的類結構 Person Student Course 1… * 1 有 繼承與組合 ? 將每個類的聲明與實現(xiàn)分別獨立保存在與類同名的 .h頭文件和 .cpp文件中。 ? Course類 繼承與組合 ? Student類 ? 項目文件 第 6章 多態(tài)性 ? 多態(tài)性 是面向對象程序設計語言的又一重要特征,它是指不同對象接收到同一消息時會產生不同的行為。繼承所處理的是 類與類之間的層次關系 問題,而多態(tài)則是處理類的層次結構之間,以及同一個類內部 同名函數(shù) 的關系問題。簡單地說,多態(tài)就是在同一個類或繼承體系結構的基類與派生類中,用同名函數(shù)來實現(xiàn)各種不同的功能。
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1