繼承和派生

2021-09-24 05:55:48 字數 2082 閱讀 8523

在 c++中可重用性(software reusability)是通過繼承(inheritance)這一機制來實現的。

類和類之間的關係

has-a,uses-a 和is-a

has-a 包含關係,用以描述乙個類由多個「部件類」構成。實現has-a

關係用類成員表示,即乙個類中的資料成員是另一種已經定義的類。

uses-a 乙個類部分地使用另乙個類。通過類之間成員函式的相互聯絡,

定義友員或物件引數傳遞實現。

is-a 機制稱為「繼承」。關係具有傳遞性,不具有對稱性。

繼承定義:

類的繼承,是新的類從已有類那裡得到已有的特性。或從已有類產生新類

的過程就是類的派生。原有的類稱為基類或父類,產生的新類稱為派生類或子類。

派生與繼承,是同一種意義兩種稱謂。 isa 的關係。

派生類的組成:

派生類中的成員,包含兩大部分,一類是從基類繼承過來的,一類是自己增加

的成員。從基類繼承過過來的表現其共性,而新增的成員體現了其個性。

派生類成員的標識和訪問:

public公有繼承

當類的繼承方式為公有繼承時,基類的公有和保護成員的訪問屬性在派生

類中 不變,而基類的私有成員不可訪問。即基類的公有成員和保護成員被繼承

到派生類 中仍作為派生類的公有成員和保護成員。派生類的其他成員可以直接

訪問它們。無 論派生類的成員還是派生類的物件都無法訪問基類的私有成員。

private私有繼承

當類的繼承方式為私有繼承時,基類中的公有成員和保護成員都以私有成

員身 份出現在派生類中,而基類的私有成員在派生類中不可訪問。基類的公有

成員和保 護成員被繼承後作為派生類的私有成員,派生類的其他成員可以直接

訪問它們,但 是在類外部通過派生類的物件無法訪問。無論是派生類的成員還

是通過派生類的對 象,都無法訪問從基類繼承的私有成員。通過多次私有繼承

後,對於基類的成員都 會成為不可訪問。因此私有繼承比較少用。

protected保護繼承

保護繼承中,基類的公有成員和私有成員都以保護成員的身份出現在派生

類 中,而基類的私有成員不可訪問。派生類的其他成員可以直接訪問從基類繼

承來的 公有和保護成員,但是類外部通過派生類的物件無法訪問它們,無論派生

類的成員 還是派生類的物件,都無法訪問基類的私有成員。

private成員在子類中依然存在,但是卻無法訪問到。不論何種方式繼承

基類,派生類都不能直接使用基類的私有成員。

如何適當的使用public,protected和private為成員宣告訪問級別:

1、需要被外界訪問的成員直接設定為public

2、只能在當前類中訪問的成員設定為private

3、只能在當前類和子類中訪問的成員設定為protected,protected成

員的訪問許可權介於public和private之間。

繼承中的構造和析構:

型別相容規則:

型別相容規則是指在需要基類物件的任何地方,都可以使用公有派生類

的物件來替代。通過公有繼承,派生類得到了基類中除建構函式、析構函式之

外的所有成員。這樣,公有派生類實際就具備了基類的所有功能,凡是基類能

解決的問題,公有派生類都可以解決。

型別相容規則中所指的替代包括以下情況:

子類物件可以當作父類物件使用

子類物件可以直接賦值給父類物件

子類物件可以直接初始化父類物件

父類指標可以直接指向子類物件

父類引用可以直接引用子類物件

在替代之後,派生類物件就可以作為基類的物件使用,但是只能使用從基類繼

承的成員。

如下所示:

#include    using   namespace   std;   

class   parent 

}; class   child   :   public  parent 

}; void    print01(parent     *p)

void    print02(parent     &p)

void    main() 

派生和繼承

1.派生類的概念 以物件導向的程式設計的觀點來看,繼承表達的是物件類之間的相互關係。這種關係使得某類物件可以繼承另外一類物件的特徵和能力。如果一類物件繼承了另一類物件的特徵和能力,這個類就叫做所繼承類的派生類。1.1 宣告乙個派生類的一般格式是 class 派生類名 派生方式 public or p...

繼承和派生

繼承 類和類之間的關係 派生 子類在父類基礎上衍變出一些新的特性或者功能 子模擬父類更加強大 父類 parentclass superclass 基類 子類 childclass subclass 派生類 nsobject 還可以稱為根類 private 私有繼承 protected 受保護繼承 p...

繼承和派生

繼承中的基本語法 通過公有繼承,派生類得到了基類中除建構函式 析構函式之外的所有成員。include using namespace std class parent void howtoprint2 parent base void main int b protected private cla...