實訓C++語言設計——繼承與派生

來源:互聯網
上載者:User

目的: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執行結果:

如果不把車基類設為虛基類,則程式無發分別出>機車類中所繼承到的成員是繼承自單車類還是汽車類,這樣就會出現二義性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.