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

正文內(nèi)容

c程序設(shè)計part2)-資料下載頁

2025-09-25 16:26本頁面
  

【正文】 { int x,y。 public: f()。 }。 class B: public A { int z。 public: f()。 g()。 }。 A a。 B b。 a = b。 //OK, b = a。 //Error ()。 //A::f() A amp。r_a=b。 //OK A *p_a=amp。b。 //OK B amp。r_b=a。 //Error B *p_b=amp。a。 //Error 把派生類對象賦值 給基類對象 基類的引用或指針可以引用 或指向派生類對象 func1(Aamp。 a) { … ()。 … } func2(A *pa) { … paf()。 …} func1(b)。 func2(amp。b)。 A::f? B::f? 虛函數(shù) ? 前期綁定 ( Early Binding) ? 編譯時刻 ? 依據(jù)對象的靜態(tài)類型 ? 效率高 、 靈活性差 ? 動態(tài)綁定 ( Late Binding) ? 運行時刻 ? 依據(jù)對象的實際類型 ( 動態(tài) ) ? 靈活性高 、 效率低 ? 注重效率 ? 默認前期綁定 ? 后期綁定需顯式指出 virtual 虛函數(shù) ? 定義 ? virtual class A { … public: virtual f()。 }。 ? 動態(tài)綁定 ? 根據(jù) 實際引用和指向的對象類型 虛函數(shù) ? 如基類中被定義為虛成員函數(shù) , 則派生類中對其重定義的成員函數(shù)均為虛函數(shù) ? 限制 ? 類的成員函數(shù)才可以是虛函數(shù) ? 靜態(tài)成員函數(shù)不能是虛函數(shù) ? 內(nèi)聯(lián)成員函數(shù)不能是虛函數(shù) ? 構(gòu)造函數(shù)不能是虛函數(shù) ? 析構(gòu)函數(shù)可以 ( 往往 ) 是虛函數(shù) 虛函數(shù) class A { public: A() { f()。} virtual void f()。 void g()。 void h() { f()。 g()。 } }。 class B: public A { public: void f()。 void g()。 }。 … B b。 A *p=amp。b。 pf()。 pg()。 ph()。 //調(diào)用 ::B(), ::A(), ::f //調(diào)用 ::f //調(diào)用 ::g //調(diào)用 ::h, ::f, ::g class A { public: virtual void f() 。 void g() 。 }。 class B: public A { public: void f() { g()。 } void g() 。 }。 B b。 A* p = amp。b。 pf()。 //::g 虛函數(shù) ? 純虛函數(shù)和抽象類 ? 純虛函數(shù) ? 聲明時在函數(shù)原型后面加上 = 0 virtual int f()=0。 ? 往往 只給出函數(shù)聲明,不給出實現(xiàn) ? 抽象類 ? 至少包含一個純虛函數(shù) ? 不能用于創(chuàng)建對象 ? 為派生類提供框架 , 派生類提供抽象基類的所有成員函數(shù)的實現(xiàn) class AbstractClass { … public: virtual int f()=0。 }。 虛函數(shù) Figure Rectangle Ellipse Line virtual display()=0。 display display display Figure *a[100]。 a[0] = new Rectangle()。 a[1] = new Ellipse()。 a[2] = new Line()。 … for (int i=0。 inum_of_figures。 i++) a[i]display(); 虛函數(shù) ? 后期綁定的實現(xiàn) class A { int x,y。 public: virtual f()。 virtual g()。 h()。 }。 class B: public A { int z。 public: f()。 h()。 }。 A a。 B b。 A *p。 ?創(chuàng)建一個 虛函數(shù)表 (vtable) ?記錄所有虛函數(shù)入口地址 ?對象的內(nèi)存空間中含有指針,指向其虛函數(shù)表 B::f A::g b x y z B_vtable pf() (*(*p))(p) (**((char *)p4))(p) a x y A::f A::g A_vtable 虛函數(shù) ? 虛析構(gòu)函數(shù) class B {…}。 class D: public B{…}。 B* p = new D。 class string {…} class B {…} class D: public B{ string name。 …} B* p = new D。 虛函數(shù) ? 確定 public inheritance,表現(xiàn) “ is_a”關(guān)系 ? 不要重定義繼承而來的非虛成員函數(shù) class person { … }。 class student: public person { … }。 void dance(const personamp。 p)。 void study(const studentamp。 s)。 person p。 student s。 dance(p)。 dance(s)。 study(s)。 study(p)。 //Error class B { public: void mf()。 … }。 class D: public B { … }。 D x。 B* pB = amp。x。 pBmf()。 D* pD = amp。x。 pDmf()。 public: void mf()。 //B:mf //D:mf class rectangle { public: virtual void setHeight(int) … }。 class Square: public rectangle { … }。 虛函數(shù) ? 明智地運用 private Inheritance ? Implementedintermof ? 在軟件設(shè)計層面沒有意義,只用于軟件實現(xiàn)層面 class A { … }。 class B: private A { … }。 void f(const Aamp。 a) { … } A a。 B b。 f(a)。 f(b)。 //Error 虛函數(shù) ? 純虛函數(shù) 只有函數(shù)接口會被繼承 ? 子類 必須 繼承函數(shù)接口 ? (必須)提供實現(xiàn)代碼 ? 一般虛函數(shù) 函數(shù)的接口及缺省實現(xiàn)代碼都會被繼承 ? 子類 必須 繼承函數(shù)接口 ? 可以 繼承缺省實現(xiàn)代碼 ? 非虛函數(shù) 函數(shù)的接口和其實現(xiàn)代碼都會被繼承 ? 必須 同時繼承接口和實現(xiàn)代碼 class Shape { public: virtual void draw() const = 0。 virtual void error(const std::stringamp。 msg)。 int objectID() const。 }。 虛函數(shù) ? 絕對不要重新定義繼承而來的缺省參數(shù)值 ? 靜態(tài)綁定 ? 效率 class A { public: virtual void f(int x=0) { …} }。 class B: public A { public: virtual void f(int x=1) { …} }。 class C: public A { public: virtual void f(int ) { …} }。 A *p_a。 B b。 p_a = amp。b。 p_af()。 A *p_a1。 C c。 p_a1 = amp。c。 p_a1f()。 多繼承 ? 多繼承 ? 定義 class 派生類名 : [繼承方式 ] 基類名 1, [繼承方式 ] 基類名 2, … { 〈 成員表 〉 } ? 繼承方式 ? public、 private 、 protected ? 繼承方式及訪問控制的規(guī)定同單繼承 ? 派生類擁有所有基類的所有成員 多繼承 Bed weight Sleep() SetWeight() Sofa weight WatchTV() SetWeight() SleeperSofa foldOut() 多繼承 Furniture weight SetWeight() Furniture weight SetWeight() Bed Sleep() Sofa WatchTV() SleepSofa FoldOut() BaseClass Deposition 多繼承 Furniture weight SetWeight() Bed Sleep() Sofa WatchTV() SleepSofa FoldOut() Virtual Inheritance 多繼承 ? 基類的聲明次序決定: ? 對基類構(gòu)造函數(shù) /析構(gòu)函數(shù)的調(diào)用次序 ? 對基類數(shù)據(jù)成員的存儲安排 ? 名沖突 ? 基類名 ::基類成員名 ? 虛基類 ? 如果直接基類有公共的基類 , 則 , 該公共基類中的成員變量在多繼承的派生類中有多個副本 D A B C class A { int x。 … }。 class B: A。 class C: A。 class D: B, C。 多繼承 ? 類 D擁有兩個 x成員: B::x和 C::x ? 虛基類 ? 合并 class A。 class B: virtual A。 class C: virtual A。 class D: B, C。 ? 注意: ? 虛基類的構(gòu)造函數(shù)由最新派生出的類的構(gòu)造函數(shù)調(diào)用 ? 虛基類的構(gòu)造函數(shù)優(yōu)先非虛基類的構(gòu)造函數(shù)執(zhí)行
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1