繼承與派生

2021-07-24 17:46:24 字數 2876 閱讀 9901

定義:類的繼承,是新的類從已有類那裡得到已有的特性,從已有類產生新類的過程就是類的派生,原有的類稱為基類,產生的新類稱為派生類;乙個派生類,可以同時有多個基類,這種情況稱為多繼承;派生類成員是指除了從基類繼承來的所有成員之外,新增加大的資料和函式成員;

一.派生類生成過程

1.吸收基類成員

派生類實際上包含了它的全部基類中除建構函式和析構函式之外的所有成員;

2.如果派生類宣告了乙個和某基類成員同名的新成員(如果是成員函式,則參數列也要相同,引數不同的情況屬於過載),派生類的新成員就隱藏了外層同名成員,這叫做同名隱藏;

3.新增新成員

增加資料和函式成員,實現必要的新增功能;

二.訪問控制

1.共有繼承

當類的繼承方式為公有繼承時,基類的公有成員和保護成員的訪問屬性在派生類中不變,而無論是派生類的成員還是派生類的物件都無法直接訪問基類的私有成員;

#include#includeclass point								//基類point類的定義

float getx() const

float gety() const

private:

float x,y;

};class rectangle:public point //派生類定義部分

float geth() const

float getw() const

private:

float w,h;

};int main(void)

float getx() const

float gety() const

private:

float x,y;

};class rectangle:private point //派生類定義部分(私有繼承)

float geth() const

float getw() const

//!!!!!!!!!!!!!!!!!!!

float getx() const

float gety() const

//!!!!!!!!!!!!!!!!!!!

private:

float w,h;

};int main(void)

int main(void)

四.派生類的構造和析構函式1.建構函式

(1)構造派生類的物件時,就要對基類的成員物件和新增成員物件進行初始化;首先呼叫基類的建構函式,來初始化它們的資料成員,然後按照建構函式初始化列表中指定的方式初始化派生類新增的成員物件,最後再執行派生類建構函式的函式體;對於使用預設建構函式(即沒有手寫建構函式或沒有引數)的基類,可以不給出類名,系統自動初始化,不用給出『提示』,成員物件的初始化也如此;

(2)如果對基類初始化時,需要呼叫基類的帶有形參表的建構函式時,派生類必須宣告建構函式,提供乙個將引數傳遞給基類建構函式的途徑;當派生類沒有顯式建構函式時,系統會生成乙個預設建構函式,該預設建構函式會使用基類的預設建構函式對繼承自基類的資料初始化,並呼叫類  型別  的成員物件的預設建構函式,對這些成員物件初始化;

(3)執行順序

class base1

//基類base1,建構函式有引數

};class base2

//基類base2,建構函式有引數

};class base3

//基類base3,建構函式無引數

};class derived:public base2,public base1,public base3

private:

base1 member1;

base2 member2;

base3 member3;

};

2.複製建構函式

如果要為派生類編寫複製建構函式,一般需要為基類相應的複製建構函式傳遞引數

(ps:凡是出現新的派生類都需要「重新構造」基類)

3.析構函式

派生類的析構函式只需在函式體中負責把派生類新增的非物件成員進行清理即可,系統會自己呼叫基類即物件成員的析構函式對基類及物件成員進行清理,清理順序與構造順序相反;

五.派生類成員的標識與訪問

如果某派生類的多個基類擁有同名的成員,同時,派生類又新增這樣的同名成員,在這種情況下,派生類成員將隱藏所有基類的同名成員,若派生類的函式與基類的函式同名但具有不同的引數數量或引數型別,不屬於函式過載,因為只有在相同的作用域中定義的函式才可以過載;通過物件名  .  成員名的方法可以唯一標識和訪問派生類新增成員,但若派生類中沒有這個同名成員,這個方法就沒有辦法唯一標識成員,因為從不同基類繼承過來的同名成員具有相同的作用域(即作用域範圍相同,沒有包含與被包含的關係,如基類包含派生類);

#include#includeclass base0

int var0;

void fun0() {std::cout構造乙個類的物件的一般順序:

(有直接或間接的虛基類時)執行虛基類建構函式->>執行其他基類的建構函式->>執行新增類型別的成員物件的建構函式->>基本資料型別的初始化->>執行函式體

彩蛋(using補充)

派生與繼承 多重派生

1 理解下面的程式,並在 vc 6.0 下執行檢視結果,回答程式後面的問題。class cbase1 cbase1 void print protected int a class cbase2 cbase2 void print protected int b class cderive publ...

繼承與派生

實驗內容 建立乙個基類,兩個派生類,讓每乙個派生類都包含乙個函式area 分別用來返回矩形和三角形的面積。用建構函式對height和width進行初始化。要求通過基類指標訪問虛函式的方法。純虛函式 virtual double area 0 純虛函式的作用是在基類中為派生類保留乙個函式的名字,以便派...

繼承與派生

在c 中,所謂 繼承 就是在乙個已存在的類的基礎上建立乙個新的類。已存在的類成為 基類 新建立的類成為 派生類 乙個新類從已有的類那裡獲得其已有特性,這種現象成為累的繼承。從另一角度說,從已有的類產生乙個新的子類,稱謂累的派生。派生類的宣告方式 class 派生類名 繼承方式 基類名 派生類新增加的...