關於繼承的理解

2021-08-21 03:57:49 字數 2858 閱讀 8236

一.

基本概念

(類之間的關係

)繼承就是在已有類的基礎上建立新類的過程

已有的類叫做基類或父類,新類則叫做派生類或子類

二.基類和派生類

(一)類繼承關係的語法形式

class

派生類名

: 基類名錶

;基類名錶的構成

訪問控制

基類名1,

訪問控制

基類名2,…

,訪問控制

基類名n

訪問控制表示派生類對基類的繼承方式:

public  公有繼承 

private    私有繼承

protected 保護繼承

(二)訪問控制

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

(三)派生類的生成過程

1.吸收基類成員(全部吸收(構造、析構除外),但不一定可見)

在c++的繼承機制中,派生類吸收基類中除建構函式和析構函式之外的全部成員。 

2.改造基類成員

通過在派生類中定義同名成員(包括成員函式和資料成員)來遮蔽(隱藏)在派生類中不起作用的部分基類成員。

3.新增派生類新成員

僅僅繼承基類的成員是不夠的,需要在派生類中新增新成員,以保證派生類自身特殊屬性和行為的實現。

(四)派生類物件結構

(四)class father

;class son:public father

;

(1)

公有繼承:

基類派生類

private成員

protected成員        

protected成員   

public成員            

public成員

private成員

protected成員

public成員

以公有方式繼承的派生類,基類的public和protected成員在派生類中性質不變,派生類可以直接使用這些成員。

定義乙個基類person(不定義建構函式)

姓名、性別、年齡(訪問許可權設定為私有)

定義公有的成員函式set_p()

定義公有的成員函式display_p(),顯示person的資訊

再由基類派生出學生類(不定義建構函式,採用公有繼承的方式)

增加學號、班級、專業和入學成績

定義公有成員函式set_t()

定義成員函定義公有的成員函式display_s(),顯示所有的資訊

#include#include using namespace std;

class person

void show_p()

void show_t()

注意:這是基類有建構函式且含有引數時使用

八.派生類析構函式

1.當派生類中不含物件成員時

(1)在建立派生類物件時,建構函式的執行順序是:基類的建構函式→派生類的建構函式;

(2)在撤消派生類物件時,析構函式的執行順序是:派生類的析構函式→基類的析構函式。

2.當派生類中含有物件成員時

(1)在定義派生類物件時,建構函式的執行順序:基類的建構函式→物件成員的建構函式→派生類的建構函式;

(2) 在撤消派生類物件時,析構函式的執行順序:派生類的析構函式→物件成員的析構函式→基類的析構函式。

九.多繼承

乙個類有多個直接基類的繼承關係稱為多繼承

1.  多繼承宣告語法

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

;2.類 c 可以根據訪問控制同時繼承類 a 和類 b 的成員,並新增自己的成員

classa

classb

class c:public a,public b

3.多繼承的派生類構造和訪問(1

)多個基類的派生類建構函式可以用初始式呼叫基類建構函式初始化資料成員。(2

)執行順序與單繼承建構函式情況類似。多個直接基類建構函式執行順序取決於定義派生類時指定的各個繼承基類的順序。(3

)乙個派生類物件擁有多個直接或間接基類的成員。不同名成員訪問不會出現二義性。如果不同的基類有同名成員,派生類物件訪問時應該加以識別

4.多繼承的建構函式

派生類名(引數總表):基類名1(參數列1),基類名2(參數列2),…,基類名n(參數列n)

多繼承方式下建構函式的執行順序:

(1)先執行所有基類的建構函式

(2)再執行物件成員的建構函式

(3)最後執行派生類的建構函式

處於同一層次的各基類建構函式的執行順序取決於定義派生類時所指定的基類順序

與派生類建構函式中所定義的成員初始化列表順序沒有關係。

內嵌物件成員的建構函式執行順序與物件在派生類中宣告的順序一致

心得:在類的繼承中,派生類繼承基類的建構函式和析構函式之外的所有成員,但是不論哪種方式繼承基類都不可以對基類的私有資料成員進行直接操作,但是可以通過基類中的成員函式來對基類中私有資料成員進行操作。

如果基類沒有定義建構函式或有無參的建構函式,派生類也可以不用定義建構函式。

如果基類無無參的建構函式,派生類必須定義建構函式。

如果派生類的基類也是派生類,則每個派生類只負責直接基類的構造。派生類是否定義析構函式與所屬的基類無關。

可以再派生類中定義同名成員來隱藏派生類中部分不起作用的基類成員。

合理運用繼承能夠有效減少**的複雜程度,提高寫**的效率,在

可以考慮

優化**時使用等。

繼承的理解

一,什麼是繼承 是建構函式之間的相關應用 繼承的是屬性和方法 是子集從父級繼承 常見的繼承方法有,原型繼承,建構函式繼承,es6繼承 二,建構函式 es5定義建構函式 建構函式 function father name,age father.prototype.fun1 function fathe...

關於多重繼承的一些理解

class base1 base1 void testfunc int abc class base2 base2 void testfunc int abc class son public base1,public base2 son void showabc int main compilin...

關於繼承,函式的繼承

1.子類擁有了父類的public財產 私有成員其實也有,但是訪問不了 通過子類呼叫函式時,編譯器先在子類中找相應的函式,找不到的話再去父類找。如此一來,如果父類和子類定義了一樣的函式 包括引數列表 子類的函式會覆蓋父類函式。如果,父類定義了子類的同名函式,但是引數列表不同,子類的也會被覆蓋隱藏,如 ...