c 課程總結3(繼承 多型)

2021-10-06 08:23:26 字數 3064 閱讀 8820

一、繼承:

繼承主要實現重用**,節省開發時間。

1、類繼承關係的語法形式

class 派生類名 : 基類名錶

;2、繼承符合的規則:

繼承是可傳遞的。如果c從b中派生,b又從a中派生,那麼c不僅繼承了b中宣告的成員,同 樣也繼承了a中的成員。

派生類應當是對基類的擴充套件。派生類可以新增新的成員,但不能除去已經繼承的成員的定義。

建構函式和析構函式不能被繼承。除此之外的其它成員,不論對它們定義了怎樣的訪問方式,都能被繼承。基類中成員的訪問方式只能決定派生類能否訪問它們。

派生類如果定義了與繼承而來的成員同名的新成員,就可以覆蓋已繼承的成員。但這並不因為這派生類刪除了這些成員,只是不能再訪問這些成員。

派生類定義了與基類同名的成員,在派生類中訪問同名成員時遮蔽(hide)了基類的同名成員。在派生類中使用基類的同名成員,顯式地使用類名限定符:類名 :: 成員

3、派生類建構函式

宣告:派生類建構函式 ( 變元表 ) : 基類 ( 變元表 ) , 物件成員1( 變元表 ) … 物件成員n ( 變元表 )

派生類建構函式和析構函式的使用原則:

1.派生類建構函式和析構函式的使用原則 基類的建構函式和析構函式不能被繼承.。

2. 如果基類沒有定義建構函式或有無參的建構函式,

3.派生類也可以不用定義建構函式 如果基類無無參的建構函式,派生類必須定義建構函式。

4.如果派生類的基類也是派生類,則每個派生類只負責直接基類的構造。

3. 派生類是否定義析構函式與所屬的基類無關。

派生類建構函式格式:

派生類::派生類名(引數總表):基類名(參數列)

4、多繼承

多個基類的派生類建構函式可以用初始式呼叫基類建構函式初始化資料成員。多個直接基類建構函式執行順序取決於定義派生類時指定的各個繼承基類的順序。

多繼承宣告語法:

class 派生類名 : 訪問控制 基類名1 , 訪問控制 基類名2 , … , 訪問控制 基類名n

5、虛基類

虛繼承宣告使用關鍵字:virtual

要使這個公共基類在派生類中只產生乙個子物件,必須對這個基類宣告為虛繼承,使這個基類成為虛基類。

6、賦值相容規則:

賦值相容規則指在程式中需要使用基類物件的任何地方,都可以用公有派生類的物件來替代。

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

a .派生類的物件可以賦給基類物件(強制型別轉換)

b .派生類的物件可以初始化基類的引用

c .派生類的物件的位址可以賦給基類型別的指標

二、多型:

形參一定是父類的引用,而實參可以是它的任何乙個子類的引用

1、乙個介面,多種方法。

同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果。

多型的三個條件:

a. 繼承的存在(繼承是多型的基礎,沒有繼承就沒有多型).

b. 子類重寫父類的方法(多型下呼叫子類重寫的方法).

c. 父類引用變數指向子類物件(子類到父類的型別轉換).

2、基類指標和派生類指標與基類物件和派生類物件4種可能匹配:

直接用基類指標引用基類物件;

直接用派生類指標引用派生類物件;

用基類指標引用乙個派生類物件;

用派生類指標引用乙個基類物件。

3、派生類指標只有經過強制型別轉換之後,才能引用基類物件

派生類指標引用基類物件

#include

using

namespace std ;

class

date

void

setdate

(int y,

int m,

int d )

void

print()

protected

:int year , month , day ;};

class

datetime

:public date

void

settime

(int h,

int mi,

int s )

void

print()

private

:int hours , minutes , seconds ;};

intmain()

4、根據賦值相容,用基類型別的指標指向派生類,就可以通過這個指標來使用類(基類或派生類)的成員函式。

如果這個函式是普通的成員函式,通過基類型別的指標訪問到的只能是基類的同名成員。

而如果將它設定為虛函式,則可以使用基類型別的指標訪問到指標正在指向的派生類的同名函式。從而實現執行過程的多型。

4、實現動態聯編方式的前提:

多型**理解

classa}

;classb:

public a};

void

test1()

三、總結

通過這段時間繼承與多型知識的學習,加上繼承作業是實踐,逐漸理解了這些知識。所謂複製相容性規則,指的是凡是需要用到父類引用的地方,都可以使用它的子類引用去代替。多型就是將同乙個訊息傳送給不同物件時,他們所做的響應可能是不同的。

想要更好的運用這些知識點,還是要多動手實踐,多些**。

總結 繼承,多型

一.不能被繼承的父類成員 1.private 2.子類與父類不在同包,使用預設訪問許可權的成員。3.構造方法。二.訪問許可權 從小到大 private 私有的 friendly 預設 protected 受保護的 public 公有的 三.方法重寫規則 1.方法名相同。2.引數列表相同。3.返回值型...

C 複習3(繼承和多型)

目錄 一 繼承 二 多型 1 繼承的本質 復用 2 繼承和派生 派生 從乙個或多個以前定義的類 基類 產生新類的過程稱為派生,這個新類稱為派生類。派生的新類同時可以增加或者重新定義資料和操作,這就產生了類的層次性。繼承 繼承是物件導向語言的乙個重要機制,通過繼承可以在乙個一般類的基礎上建立新類,被繼...

C 多型 繼承多型

什麼是多型?個人理解為 在程式語言繼承關係中,子類能替代父類,表現出不同的行為。換句話說 在繼承關係中,乙個類被例項化被其子類替代,子類中有父類的虛方法重寫,或者有父類同名方法 new 呼叫相同方法時候,將表現出子類或者父類中不同行為 老闆,上 static void main string arg...