實驗五 繼承與派生

2021-08-19 17:10:29 字數 2475 閱讀 2147

1.掌握派生類的定義方法的和派生類建構函式定義方法。

2.掌握在不同繼承方式的情況下,基類成員在派生類中的訪問許可權。

3.掌握在多繼承方式的情況下,建構函式與析構函式的呼叫時機與順序。

1.除錯下列程式,並在對程式進行修改後再除錯,指出除錯中出錯原因。

//sy5_1.cpp

#includeusing namespace std;

class a

int geta()

public:

int a;

};class b:public a

int getb()

void show()

void print()

cout<>j;

if(j==1) goto loop;

else return 0;

}

程式輸出結果如下:

4.試寫出所能想到的所有形狀(包括二維的和三維的),生成乙個形狀層次類結構。生成的層次結構一shape作為基類,並由此派生出twodimshape類和threedimshape類。它們的派生類是不同形狀類,定義層次結構中的每乙個類,並用函式main()進行測試。(sy5_4.cpp)編寫程式如下:

1.通過對實驗內容中第1題的除錯,總結不同繼承方式的情況下,基類成員在派生類中的訪問許可權。

答:當類的繼承方式為公有繼承時,在派生類中,基類的公有成員和保護成員被繼承後分別作為派生類的公有成員和保護成員,這樣使得派生類的成員函式可以直接訪問它們,而派生類成員函式無法直接訪問基類的私有成員。在類的外部,派生了的物件可以訪問繼承下來的基類公有成員。                      

當類的繼承方式為私有繼承時,在派生類中,基類的公有成員和保護成員作為派生類的私有成員,派生類的成員函式可以直接訪問它們,而派生類的成員函式無法直接訪問基類的私有成員。在類外部,派生類的物件無法訪問基類的所有成員。

當類的繼承方式為保護繼承時,在派生類中,基類的公有成員和保護成員作為派生類的保護成員,派生類的成員函式可以直接訪問它們,而派生類的成員函式無法直接訪問基類的私有成員。在類外部,派生類的物件無法基類的所有成員。

2.解釋實驗內容第2題的執行結果,總結多繼承方式的情況下,建構函式與析構函式的呼叫時機與順序。虛基類的建構函式與普通基類的建構函式在呼叫時有什麼不同?

答:建構函式的呼叫順序:先呼叫所有基類的建構函式,再呼叫派生類中子物件類的建構函式(如果派生類中沒有子物件),最後呼叫派生類的建構函式。

虛基類的建構函式的呼叫順序:遵循兩個原則,而且按順序優先滿足:1 先呼叫完所以基類,再呼叫子類;2 先呼叫虛擬基類,再呼叫非虛擬基類,一旦呼叫了虛擬基類的建構函式,則非虛擬基類建構函式就按照宣告的順序被呼叫。

普通基類的建構函式:虛基類建構函式、普通基類建構函式、子類建構函式和其他(從左至右依次執行)。

3.如果希望附圖1中的base1、base2均有兩個,如何修改順序

?通過本章的學習了解類的繼承,三種繼承方式的區別,以及通過引數列表對派生類的成員賦值的方法,即呼叫基類建構函式後再對新增成員賦值,虛基類的使用時為了對基類資料儲存乙份拷貝,應注意的是在基類其他的直接派生類繼承時也應宣告是虛基類,多重繼承時的應注意建構函式賦值的規律;只是在本次實驗的操作過程中還是存在了很多的問題需要我們認真的去學習和思考,同時也讓我意識到自己對於本次的實驗中的一些知識點還沒有掌握好,需要自己在課下多花時間來學習。

實驗五 繼承與派生

1.掌握派生類的定義方法的和派生類建構函式定義方法。2.掌握在不同繼承方式的情況下,基類成員在派生類中的訪問許可權。3.掌握在多繼承方式的情況下,建構函式與析構函式的呼叫時機與順序。1.除錯下列程式,並在對程式進行修改後再除錯,指出除錯中出錯原因。程式如下 include using namespa...

實驗五 繼承與派生

sy5 1.cpp includeusing namespace std class a int geta public int a class b public a int getb void show void print cout j if j 1 goto loop else return ...

實驗5 繼承與派生

sy5 1.cpp include using namespace std class a intgeta public int a class b public a intgetb void show public int b int main a,公有成員函式seta 和geta 作為派生類b的...