目的:1學習定義和使用類的繼承關係,定義衍生類別。
2熟悉不同繼承方式下對基類成員的存取控制。
3學習利用虛基類解決二義性問題。
內容(演算法、程式、步驟和方法):
1.定義一個基類animal,有私人整形成員變數age,構造其衍生類別dog,在其成員函數SetAge(int n)中直接給age賦值,看會出現什麼問題,把改為公有成員變數,觀察變化。
演算法:根據要求定義基類和衍生類別,為了反映變化,在衍生類別中定義函數PrintAge()來輸出值。
程式:
#include<iostream.h>
class animal
{
private:
int age;
};
class dog:public animal
{
public:
void setage(int n){age=n;}
void printage(){cout<<"age="<<age<<endl;}
};
void main()
{
dog dog1;
dog1.setage(5);
dog1.printage ();
}
定義一個基類BaseClass,有整形成員變數Number,構造其衍生類別DerivedClass,觀察建構函式和解構函式的執行情況。
演算法:先定義如上所述的基類和衍生類別,為了顯示建構函式和解構函式的執行情況,在這兩個函數體內可以輸出提示句。
程式:
#include<iostream.h>
class BaseClass
{
private:
int Number;
public:
BaseClass(){cout<<"調用基類建構函式!"<<endl;}
~BaseClass(){cout<<"調用基類解構函式!"<<endl;}
};
class DerivedClass:public BaseClass
{
public:
DerivedClass(){cout<<"調用子類建構函式!"<<endl;}
~DerivedClass(){cout<<"調用子類解構函式!"<<endl;}
};
void main()
{
DerivedClass son;
}
3定義一個車基類,具有等成員變數,等成員函數,由此派生出單車類和汽車類,單車類具有高度等成員變數,汽車類具有座位元等成員變數,從單車類和汽車類派生出>機車類,在繼承過程中觀察把車類設為虛基類與不設的區別。
演算法:根據題目描述,定義相應的類,為了顯示變化,在>機車類裡面可定義一個函數來進行輸出。
程式:
#include<iostream.h>
class vehicle
{
protected:
int MaxSpeed;
int Weight;
public:
vehicle(int s,int w){MaxSpeed=s;Weight=w;}
void SetMaxSpeed(int s){MaxSpeed=s;}
void SetWeight(int w){Weight=w;}
void Run(){cout<<"class vehicle is running!"<<endl;}
void Stop(){cout<<"class vehicle has stopped!"<<endl;}
};
class bicycle:virtual public vehicle
{
protected:
int Height;
public:
bicycle(int h,int s,int w):vehicle(s,w)
{Height=h;}
};
class motorcar:virtual public vehicle
{
protected:
int SeatNum;
public:
motorcar(int S,int s,int w):vehicle(s,w)
{SeatNum=S;}
};
class motorcycle:public bicycle,public motorcar
{
public:
motorcycle(ints,int w,int h,int S):vehicle(s,w),bicycle(h,s,w),motorcar(S,s,w){}
void Show()
{
cout<<"MaxSpeed:"<<MaxSpeed<<endl;
cout<<"Weight:"<<Weight<<endl;
cout<<"Height:"<<Height<<endl;
cout<<"SeatNum:"<<SeatNum<<endl;
}
};
void main()
{
motorcycle mc(150,200,15,3);
mc.Show();
}
結果及分析:
1此時出現問題如下:
error C2248: 'age' : cannot access private member declared in class 'animal'
分析:子類不能直接存取父類中的私人成員,把基類中的age改為公有成員後則我問題,執行結果如下:
2.執行結果:
分析:程式中先執行基類的建構函式,在調用子類的建構函式,而調用解構函式是則相反,即先調用子類的解構函式,然後調用基類的解構函式。
3執行結果:
如果不把車基類設為虛基類,則程式無發分別出>機車類中所繼承到的成員是繼承自單車類還是汽車類,這樣就會出現二義性。