資源描述:
《C++繼承與派生實驗報告》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、應(yīng)用數(shù)學(xué)學(xué)院信息與計算科學(xué)(信息計算)專業(yè)1班、學(xué)號3111008106姓名吳偉栓教師評定_________________實驗題目繼承與派生一、實驗?zāi)康呐c任務(wù)實驗?zāi)康模海?)學(xué)習(xí)聲明和使用類的繼承關(guān)系,聲明派生類。(2)熟悉不同繼承方式下對基類成員的訪問控制。(3)學(xué)習(xí)利用虛基類解決二義性問題。實驗任務(wù):(1)聲明一個基類Animal,有私有整型成員變量age,構(gòu)造其派生類dog,在其成員函數(shù)SetAge(intn)中直接給age賦值,看看會有什么問題,把a(bǔ)ge改為公有成員變量,還會有問題嗎?編程試試
2、看。(2)聲明一個基類BaseClass,有整形成員變量Number,構(gòu)造其派生類DerivedClass,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。(3)聲明一個車(vehicle)基類,具有MaxSpeed,Weight等成員變量,Run,Stop等成員函數(shù),由此派生出自行車(bicycle)類,汽車(motorcar)類。自行車(bicycle)類有高度(Height)等屬性,汽車(motorcar)類有座位數(shù)(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motocycle)類
3、,在繼承過程中,注意把vehicle設(shè)置為虛基類。如果不把vehicle設(shè)置為虛基類,會有什么問題?編程試試看。(4)(選做)從實驗六中的people(人員)類派生出student(學(xué)生)類,添加屬性:班號charclassNo[7];從people類派生出teacher(教師)類,添加屬性:職務(wù)charprincipalship[11]、部門chardepartment[21]。從student類中派生出graduate(研究生)類,添加屬性:專業(yè)charsubject[21]、導(dǎo)師teacherra
4、dviser;從graduate類和teacher類派生出TA(助教生)類,注意虛基類的使用。重載相應(yīng)的成員函數(shù),測試這些類。二、實驗步驟(1)編寫程序聲明基類Animal,成員變量age聲明為私有的。構(gòu)造派生類dog,在其成員函數(shù)SetAge(intn)中直接對age賦值時,會出現(xiàn)類似以下的錯誤提示:errorc2248:’age’:cannotaccessprivatememberdeclaredinclass‘Animal’把age改為公有成員變量后重新編譯就可以了。(2)編寫程序聲明一個基類Ba
5、seClass,構(gòu)造其派生類DerivedClass,在構(gòu)造函數(shù)和析構(gòu)函數(shù)中用cout輸出提示信息,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。(3)用Debug功能跟蹤程序(2)的執(zhí)行過程,觀察基類和派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。(4)編寫程序聲明一個車(vehicle)基類,由此派生出自行車(bicycle)類、汽車(motorcar)類,注意把vehicle派生為虛基類。再從bicycle和mororcar派生出摩托車(motorcycle)類,在main()函數(shù)中測試這個類。(5)編譯成功后,把v
6、ehicle設(shè)置為非虛基類,再編譯一次,此時系統(tǒng)報錯,無法編譯成功。這是因為若不把vehicle設(shè)置為虛基類,會出現(xiàn)二義性錯誤,程序不能成功編譯。一、實驗方案(1)(2)(3)(4)一、實驗結(jié)果實驗一:編譯不通過實驗二程序運(yùn)行結(jié)果如下:實驗二在lab7_2中,創(chuàng)建了一個派生類DerivedClass的對象a,先調(diào)用基類BaseClass的構(gòu)造函數(shù),再調(diào)用派生類DerivedClass的構(gòu)造函數(shù),當(dāng)對象a消失時,先調(diào)用派生類DerivedClass的析構(gòu)函數(shù),再調(diào)用基類BaseClass的析構(gòu)函數(shù)。由此可
7、見,構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序是相反的。實驗三此程序的結(jié)果如下:實驗三不把vehicle設(shè)為虛基類,編譯不通過一、結(jié)論實驗一從運(yùn)行結(jié)果看,本程序是錯誤的,原因在于dog類的成員函數(shù)無法訪問到Animal類的私有成員。將age改為公有成員后,得到如下正確程序:程序運(yùn)行結(jié)果如下:實驗二在此程序中,創(chuàng)建了一個派生類的對象,先調(diào)用基類的構(gòu)造函數(shù),再調(diào)用派生類的構(gòu)造函數(shù),當(dāng)對象消失時,先調(diào)用派生類的析構(gòu)函數(shù),再調(diào)用基類的析構(gòu)函數(shù)。由此可見,構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序是相反的。實驗二在lab7_2中,創(chuàng)建了一個
8、派生類DerivedClass的對象a,先調(diào)用基類BaseClass的構(gòu)造函數(shù),再調(diào)用派生類DerivedClass的構(gòu)造函數(shù),當(dāng)對象a消失時,先調(diào)用派生類DerivedClass的析構(gòu)函數(shù),再調(diào)用基類BaseClass的析構(gòu)函數(shù)。由此可見,構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序是相反的。實驗三如果不把vehicle設(shè)為虛基類,系統(tǒng)編譯則不通過。原因在于類bicycle、motorcar、motorcycle中的Run、Stop成員函數(shù)是從基類veh