1.理解下面的程式,並在
vc++6.0
下執行檢視結果,回答程式後面的問題。
class
cbase1
~cbase1()
void
print()
protected
:int
a;};
class
cbase2
~cbase2()
void
print()
protected
:int
b;};
class
cderive :
public
cbase1,
public
cbase2
~cderive()
void
print()
private
:cbase1 b1;
cbase2 b2;
intc;
};void
main()
問題一:指出並改正以上程式中存在的錯誤,並分析該程式的輸出結果。、
問題一:該函式沒有標頭檔案及命名空間。
問題二:在基類和派生類中,沒有合適的建構函式可用。
結果分析:
類cderive同時繼承類
cbase1
和cbase2
,所以類
cbase1
和cbase2
先後被構造第一次,在類
cderive
的私有成員中,建立了兩個物件
cbase1 b1;cbase2 b2;
所以類cbase1和
cbase2
先後被構造第二次,四次構造完成之後,再構造類
cderive
的建構函式。相反析構過程與構造過程相反,從派生類到基類依次析構。
2.理解下面的程式,並在
vc++6.0
下執行檢視結果,回答程式後面的問題。
#include
using namespace
std;
//*************************************
class
aint
geta()
private
:int
a;};
//*************************************
class
b1:public
aint
getb1()
private
:int
b1;};
//************************************
class
b2:public
aint
getb2()
private
:int
b2;};
//************************************
class
c1:public
b1int
getc1()
private
:int
c1;};
//************************************
class
c2:public
b1int
getc2()
private
:int
c2;};
//************************************
class
c3:public
b1,public
b2int
getc3()
private
:int
c3;};
//******************************************
void
main( )
問題一:在不改變原有程式意圖的前提下,改正上面程式,使程式正確輸出,並單步執行分析程式執行的過程。
改正:
此程式中存在虛繼承,b1、
b2類虛繼承a類,
a是他們的虛基類,應在b1、
b2 類前加關鍵字
virtual
。 分析:
main函式從類
a開始執行,創立了乙個類
a的空間,通過
a->b1,a->b2
的路徑初始化基類,所以兩次呼叫了
a類的建構函式。而c1,
c2分別呼叫了b1,
b2,所以c1,
c2都呼叫了b1,
b2的建構函式
,且又兩次建立了a的建構函式
。又通過了b1->c3,b2->c3的路徑,
c3呼叫了
b1,b2,a
的建構函式。
多重繼承 派生類
作 者 劉慧豔 完成日期 2014 年6月20日 版 本 號 v1.0 問題描述 分別宣告teacher 教師 類和cadre 幹部 類,採用多重繼承方式 由這兩個類派生出新類teacher cadre 教師兼幹部 類。要求 1 在兩個基類中都包含姓名 年齡 性別 位址 等資料成員。2 在teach...
繼承與派生
實驗內容 建立乙個基類,兩個派生類,讓每乙個派生類都包含乙個函式area 分別用來返回矩形和三角形的面積。用建構函式對height和width進行初始化。要求通過基類指標訪問虛函式的方法。純虛函式 virtual double area 0 純虛函式的作用是在基類中為派生類保留乙個函式的名字,以便派...
繼承與派生
在c 中,所謂 繼承 就是在乙個已存在的類的基礎上建立乙個新的類。已存在的類成為 基類 新建立的類成為 派生類 乙個新類從已有的類那裡獲得其已有特性,這種現象成為累的繼承。從另一角度說,從已有的類產生乙個新的子類,稱謂累的派生。派生類的宣告方式 class 派生類名 繼承方式 基類名 派生類新增加的...