close

按此前往C++完整教學目錄

 

 

若在寫程式時,需定義多個類別(比如類別A、B、C、D、E),而類別B、C、D、E擁有類別A的某些成員、或某些成員函式,

若在定義類別B、C、D、E都把這些成員、成員函式定義進去,會浪費程式碼空間。因此,此時就可以使用繼承(inherit )的方法。

說明如下:

B類別繼承(inherit )A類別,則稱A類別為基礎類別B類別為衍生類別。做圖為:

ss

衍生類別B因為繼承了基礎類別A,故擁有基礎類別A的某些類別成員。

繼承的程式碼為:

class A{//類別內容};

class B : 繼承方法 A{}; 

以上的繼承方法可以是publicprotectedprivate。說明如下:

繼承(inheritance)的方式有三種:

公共繼承,如下程式碼(最常用的繼承方法)

class B: public A{ //類別內容 };

表示衍生類別(B)可以存取基礎類別(A) 放在public, protected區域的資料。

且衍生類別(B)把基礎類別(A) 放在protected區域的資料放在自己(B)protected區域,把基礎類別(A) 放在public區域的資料放在自己(B)public區域。

保護繼承,如下程式碼:

class B: protected A{ //類別內容 };

表示衍生類別(B)可以存取基礎類別(A) 放在public, protected區域的資料。

且衍生類別(B)把基礎類別(A) 放在public, protected區域的資料放在自己(B)protected區域。

 

私有繼承,如下程式碼:

class B: private A{ //類別內容 };

表示衍生類別(B)可以存取基礎類別(A) 放在public, protected區域的資料。

且衍生類別(B)把基礎類別(A) 放在public, protected區域的資料放在自己(B)private區域。

 

範例如:

class person

{

public:

int age;

string name;

public:

person(int age_, string name_)

{age=age_; name=name_;}        

};

 

class teacher : public person

{

public:

int salary;

public:

teacher (int age_, string name_, int salary_): person(int age_, string name_)

{ salary = salary _; }        

};

 

class student : public person

{

public:

int score;

public:

student(int age_, string name_, int score_): person(int age_, string name_)

{ score = score_; }        

};

 

上例之中,teacher類別和student類別都繼承person類別。

 

2.  

基礎類別衍生類別是相對關係。相對一類別而言,其「衍層類別」指的是「n階衍生類別(n可以為任意正整數)」;其「基層類別」指的是「n階基礎類別(n可以為任意正整數)」。

若一函數的輸入參數列中,有一參數其資料型態為類別A的物件,則在呼叫函數時,此參數可以輸入任何A類別物件以及A衍層類別物件。如:

class A

{

public:

A(int a_){a=a_;}

int a;

};

class B: public A  //BA的一階衍生類別,因此也是A的衍層類別

public:

B(int a_,int b_):A(a_){a=a_;b=b_;}

private:

int b;

};

class C

{

public:

void print_a(A A1){cout<<A1.a<<endl;};  //此函數的參數是A類別物件

};

A A1(5);

B B1(10,60);

C C1;

C1.print_a(A1);  //此函數的參數可以輸入A類別物件。在此顯示5

C1.print_a(B1);   //此函數的參數也可以輸入B類別物件。在此顯示10

 

 

上一篇:類別(class) friend的用法

下一篇:類別(class) 衍生類別的建構式

arrow
arrow

    埃伯 發表在 痞客邦 留言(1) 人氣()