c 繼承的相關知識點

2021-10-02 04:44:11 字數 4557 閱讀 3480

導航:

1.繼承的基礎語法

2.繼承的方式(成員屬性及成員函式)

3.子類繼承父類時,建構函式及析構函式的順序

4.繼承同名的成員關係,如何訪問

5.訪問同名靜態成員

6.多繼承語法

7.菱形繼承

繼承的基礎語法

當我們寫的時候,如果每個類都有相同的部分,那麼通過乙個個將其中的內容乙個個敲出來將會十分佔空間,那麼我們就會用到繼承

方法:將公共的內容專門寫出乙個類出來,然後寫別的子類時候,加入公共部分即可。

語法:class 子類:繼承方式 父類

(其中子類又叫做派生類,父類叫做基類)

下面看例子:
#include

#include

using

namespace std;

//這裡是公共的部分,也就是下面子類都共有的部分,先寫出來

class

basepage

void

foot()

void

left()

};//子類c++

class

cpp:

public basepage //這裡就可以將公共的部分新增至類中,減少重複內容};

classpy:

public basepage //這裡同樣也是};

void

test()

intmain()

執行程式:

好處:可以減少很多在子類中重複的內容

———————————————————————————————————

繼承方式

公共繼承 保護繼承 私有繼承

若子類公共繼承父類,那麼除了父類的私有屬性訪問不到其餘與父類對應繼承

若子類保護繼承父類,那麼除了父類的私有屬性訪問不到其餘都為保護繼承

若子類私有繼承父類,那麼除了父類的私有屬性訪問不到其餘都為私有繼承

注意在類外,對於類的保護屬性以及私有屬性都不能訪問及修改,公共屬性可以訪問及修改

例子:

#include

#include

using

namespace std;

class

father

;//公共繼承

class

son1

:public father};

void

test01()

//保護繼承

class

son2

:protected father};

void

test02()

//私有繼承

class

son3

:private father};

void

test03()

intmain()

———————————————————————————————————

父類中的所有非靜態成員屬性都會被子類繼承下去

父類中私有成員屬性也會被繼承下去,只不過是被編譯器隱藏了

子類繼承父類時,建構函式與析構函式的順序?

答:當子類繼承父類的時候,先呼叫父類建構函式,再呼叫子類建構函式,析構函式與其相反

———————————————————————————————————

繼承同名的成員關係

1.子類物件可以直接訪問到子類中同名成員

2.子類物件加作用域可以訪問到父類同名成員

3.當子類與父類擁有同名的成員函式,子類會隱藏掉父類中同名的成員函式,加作用域可以訪問到父類的成員函式

例子:

#include

#include

using

namespace std;

//父類

class

father

void

func()

void

func

(int a)

int a;};

//子類進行公共繼承父類

class

son:

public father

void

func()

int a;};

//子類父類同名成員屬性時候

void

test()

//同名成員函式

void

test01()

intmain()

———————————————————————————————————

訪問同名靜態成員,與非靜態相似

例子:

#include

#include

using

namespace std;

//定義乙個父類

class

base

static

void

func

(int a)

static

int a;};

int base::a =

100;

//定義乙個子類

class

son:

public base

static

int a;

//類內靜態變數初始化};

int son::a =

200;

//訪問靜態成員屬性

void

test01()

//訪問靜態成員函式

void

test02()

intmain()

———————————————————————————————————

多繼承語法:class 子類:繼承方式 父類1,繼承方式 父類2 {};

例子:

#include

#include

using

namespace std;

class

base1

//父類1

int m_a;};

class

base2

//父類2

int m_a;};

class

son:

public base1,

public base2 //繼承兩個父類

int m_a;

int d;};

void

test()

intmain()

總結:多繼承下訪問父類繼承下來同名要加作用域
———————————————————————————————————

菱形繼承

形成條件:

1.兩個派生類繼承乙個基類

2.乙個類再繼承兩個派生類

這個就叫做菱形繼承,也叫做鑽石繼承

問題:此時這個類便產生了兩義性

解決:

1.在繼承之前加virtual,此時父類又稱為虛基類

2.此時可以直接訪問這個類的成員屬性

例子:

#include

#include

using

namespace std;

class

animal

;class

sheep

:virtual

public animal

;//下面兩個派生類繼承乙個基類

class

tuo:

virtual

public animal

;class

sheeptuo

:public sheep,

public tuo

;//乙個類再繼承兩個派生類,此時便有了二義性,有兩個m_age

void

test01()

intmain()

執行程式:三個年齡都為15,是按照最後賦值的結果來進行指向的。

C 繼承相關知識點

c 作為物件導向的語言,類之間可以繼承,被繼承的類稱為基類 父類 產生的新類稱為派生類 子類 c 的類許可權分為三個等級,private 私有的 protect 被保護的 public 公有的 其相對應的繼承的許可權也分為相同的三個等級,即private,protect以及public繼承。這三類繼...

C 中繼承的相關知識點總結

1.oop中的乙個重要概念就是繼承,它允許程式從已有類派生出新類。新類自動繼承已有類的資料成員與成員函式 2.派生類不會繼承建構函式 拷貝建構函式 析構函式或其他過載的賦值運算子 3.在例項化派生類物件時,基類建構函式在派生類構造函式呼叫之前自動呼叫 4.在銷毀派生類物件時,基類析構函式在派生類析構...

c 相關知識點

類繼承 基類指標與引用可以隱示的指向派生類的物件,但只能使用基類的函式。多型屬於豎向函式過載,派生類函式的名與基類函式得名一樣,但在呼叫多態函式時有些區別,如果該函式是通過引用或者指標而不是物件呼叫的,如果這個函式在多型過程中沒有使用關鍵字virtual那麼程式將根據引用或者指標選擇實現方法。如果函...