C++實驗四繼承(1)_第1頁
C++實驗四繼承(1)_第2頁
C++實驗四繼承(1)_第3頁
C++實驗四繼承(1)_第4頁
C++實驗四繼承(1)_第5頁
免費預覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、實驗四繼承派生類定義及訪問權(quán)限一、實驗目的1 理解繼承的概念、特性及在C+語言中的實現(xiàn)方法;2掌握C+語言派生類的定義,熟悉不同的繼承方式(派生方式);3掌握派生類構(gòu)造函數(shù)的定義及在定義、釋放派生類對象時構(gòu)造函數(shù)、析構(gòu)函數(shù)的執(zhí) 行順序;4掌握不同繼承方式下,基類的成員在派生類中的訪問特性;5初步熟悉派生類的應用。二、實驗學時課內(nèi)實驗:2課時課外練習:2課時三本實驗涉及的新知識繼承的有關概念1 繼承是面向?qū)ο蟪绦蛟O計思想最重要的概念之一,其主要作用是提高軟件的可重用 性和可維護性。在 C+中,實現(xiàn)繼承的機制是通過派生得到的,原類(被繼承的類)稱為基 類,在基類的基礎上創(chuàng)建的新類稱為派生類。2.

2、繼承具有層次結(jié)構(gòu), 越在上面的類越具有普通性和共性, 而下層類比上層類更具體, 越在下層的類越細化、專門化; 同時,繼承具有傳遞性, 即派生類能自動繼承上層基類的全 部數(shù)據(jù)結(jié)構(gòu)及操作方法(數(shù)據(jù)成員及成員函數(shù)) 。3. 在C+中,繼承分為單繼承與多繼承。只有一個基類的繼承稱為單繼承;有二個或 以上基類的繼承稱為多繼承。派生類的定義1 定義格式class派生類名:繼承方式基類名 派生類新定義的成員 ;2說明 在定義派生類時用 “:將派生類與基類分開,構(gòu)成類的層次結(jié)構(gòu);派生類與普通類的定義一樣,仍然包括數(shù)據(jù)成員與成員函數(shù)。派生類的構(gòu)造函數(shù)與析構(gòu)函數(shù)1 派生類的構(gòu)造函數(shù)定義格式派生類名(參數(shù)表):基類

3、名(參數(shù)名1,參數(shù)名2,) 構(gòu)造函數(shù)函數(shù)體說明 如果基類中顯式定義了構(gòu)造函數(shù)為基類數(shù)據(jù)成員賦初值,在派生類中也應顯式定義 構(gòu)造函數(shù),除為新增數(shù)據(jù)成員進行初始化外,同時也為基類的數(shù)據(jù)成員提供初始化的參數(shù)表。 派生類的構(gòu)造函數(shù)也可以重載。 可以定義派生類的無參構(gòu)造函數(shù),有參構(gòu)造函數(shù)及帶缺省參數(shù)的構(gòu)造函數(shù)。2 構(gòu)造函數(shù)與析構(gòu)函數(shù)的執(zhí)行順序定義派生類對象時,先執(zhí)行基類的構(gòu)造函數(shù),再執(zhí)行派生類的構(gòu)造函數(shù)。 釋放派生類對象時,先調(diào)用派生類的析構(gòu)函數(shù),再調(diào)用基類的析構(gòu)函數(shù)。3、在派生類中含有對象成員(派生類為容器類)時的構(gòu)造函數(shù)的定義格式派生類名(總參數(shù)表):基類名(參數(shù)表),成員對象名(參數(shù)表)構(gòu)造函數(shù)函

4、數(shù)體說明 定義派生類對象時,先執(zhí)行基類構(gòu)造函數(shù),再執(zhí)行成員對象所屬類的構(gòu)造函數(shù),最 后執(zhí)行派生類的構(gòu)造函數(shù)。 釋放派生類對象時,先調(diào)用派生類的析構(gòu)函數(shù),再調(diào)用成員對象所屬類的析構(gòu)函數(shù),最后調(diào)用基類的析構(gòu)函數(shù)為派生類對象成員提供值的普通成員函數(shù)1 在派生類中,通常也應定義為其對象成員提供值的普通成員函數(shù)。2.為派生類對象成員提供值的普通成員函數(shù),既要為派生類的新增的數(shù)據(jù)成員提供值,也應為所繼承的基類的數(shù)據(jù)成員提供值,通??梢酝ㄟ^調(diào)用基類成員函數(shù)實現(xiàn)。不同繼承方式下基類成員在派生類中的訪問特性1 .繼承方式在C+中,繼承方式包括公有繼承(public)、私有繼承(private)和保護繼承(pro

5、tected)三種繼承方式,相應的派生類分別稱為公有派生類、私有派生類、保護派生類。2.不同繼承方式下基類成員在派生類中的訪問特性 基類的私有成員在派生類的作用域內(nèi)均不可見,即無論是哪種繼承方式,派生類的 成員函數(shù)均不能使用基類的私有成員,而只能調(diào)用基類中的公有成員函數(shù)訪問。 在公有繼承方式下,基類中的公有成員、保護成員在派生類中的訪問權(quán)限不變,即 仍為公有成員、保護成員。 在保護繼承方式下,基類中的公有成員、保護成員在派生類中均改變?yōu)楸Wo成員。 在私有繼承方式下,基類中的公有成員、保護成員在派生類中均改變?yōu)樗接谐蓡T。四、實驗內(nèi)容驗證及認知實驗按要求調(diào)試下列程序,并回答相關問題。程序 1 (e

6、xp_401.cpp)#in clude<iostream>using n amespace std;class Base基類Base的定義 private:float x,y;public:Base(float a=0,float b=0)x=a;y=b;void prin t(void) cout<<"x="<<x<<"y="<<y;class Derived:public Base 派生類 Derived的定義注意定義方法 private:float z;public:Derived(fl

7、oat a=0,float b=0,float c=0):Base(a,b) z=c;派生類的構(gòu)造函數(shù)定義void prin t(void)/派生類的成員函數(shù) Base:print(); 調(diào)用基類 Base 的成員函數(shù) print(); cout<<" z="<<z;void mai n(void) Base a(10.0,20.0);Derived b(10.0,20.0,30.0);a. pri nt();cout<<e ndl;b. pri nt();cout<<e ndl;b.Base:pri nt();cout<

8、;<e ndl;問題:運行程序的輸出結(jié)果為: 程序中“ a.print(); ”調(diào)用的是類成員中的“ print() ”成員函數(shù),“ b.print(); ”調(diào)用的是 類成員中的"print() ”成員函數(shù),“ b.Base:print(); ”調(diào)用的是類成員中的“ print() ”成員函數(shù)。構(gòu)造函數(shù)“ Derived(float a=0,float b=0,float c=0):Base(a,b) ” 中的“ Base(a,b)” 的作用 是:。 將派生類定義中的“public"改為"private",重新編譯程序,程序中語句會出現(xiàn)編譯錯,其原

9、因是 。知識應用實驗1 分析下列程序,先寫出程序的輸出結(jié)果,再上機運行程序驗證其正確性,如果不正 確,請認真分析出錯原因。程序 2 (exp_402.cpp)#in clude<iostream>using n amespace std;class Base private:float x,y;public:Base(float a=0,float b=0)你分析的程序輸出結(jié)果是:程序的實際輸出結(jié)果是:x=a;y=b;cout<<"基類構(gòu)造函數(shù)被調(diào)用!n"Base()cout<<"基類析構(gòu)函數(shù)被調(diào)用!n"void pr

10、in t(void) cout<<"x="<<x<<"y="<<y;class Derived:public Base private:float z;public:Derived(float a=0,float b=0,float c=0):Base(a,b) z=c;cout<<"派生類構(gòu)造函數(shù)被調(diào)用!n"Derived()cout<<"派生類析構(gòu)函數(shù)被調(diào)用!n"void prin t(void) Base:pri nt();cout<

11、;<" z="<<z;void mai n(void) Base a(10.0,20.0);Derived b(10.0,20.0,30.0);a. pri nt();cout<<e ndl;b. pri nt();cout<<e ndl;程序 3 (exp_403.cpp)#in clude<iostream.h>class Data private:int da;public:Data( int x=0) da=x;cout<<" Data類的構(gòu)造函數(shù)被調(diào)用!"<<endl

12、;Data() cout<<" Data 類的析構(gòu)函數(shù)被調(diào)用!"<<endl;你分析的程序輸出結(jié)果是:程序的實際輸出結(jié)果是:;class A private :int a;public :A(int x=0) a=x;cout<<" A類的構(gòu)造函數(shù)被調(diào)用!"<<endl;A() cout<<" A 類的析構(gòu)函數(shù)被調(diào)用!"<<e ndl;class B : public A private :int b;Data c;public :B(i nt x=0,i nt

13、y=O,i nt z=O):A(x),c(y) b=z;cout<<" B類的構(gòu)造函數(shù)被調(diào)用!"<<endl;B() cout<<" B 類的析構(gòu)函數(shù)被調(diào)用!"<<e ndl;void mai n() B a;2 完善、調(diào)試通過下列程序,并按所要求回答問題。程序 4( exp_404.cpp)#in clude<iostream>using n amespace std;class Base基類Base的定義 private:float x,y;public:Base(float a=0,flo

14、at b=0)x=a;y=b;void setBase(float a=0,float b=0)x=a;y=b;void prin t(void) cout<<"x="<<x<<"ny="<<y<<e ndl;class Derived:public Base 派生類 Derived 的定義 private:float z;public:Derived( (1):(2) z=c;/派生類的構(gòu)造函數(shù)定義void setDerived( (3) );z=c;void prin t(void)/派生類的成員函數(shù) Base:print();/ 調(diào)用基類 Base 的成員函數(shù) print(); cout<<"z="<<z<<e ndl;void mai n(void) Derived b(10.0,20.0,30.0);b.pri nt();b.setDerived(15.5,25.

溫馨提示

  • 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

提交評論