C 基礎 四 繼承和派生

2021-10-06 01:57:45 字數 3691 閱讀 7438

1 類和類之間的關係

#include

using

namespace std;

classa}

;// 1 包含關係 b has a

class

b

a a;};

//2 依賴關係 c use a

classc}

;//3 繼承關係 d extend a

classd:

public a};

intmain

(void

)

執行結果

funca()

funca()

2 繼承的訪問方式
#include

using

namespace std;

class

parent

;//1 類的公有繼承

class

child1

:public parent};

//2 類的保護繼承

class

child2

:protected parent};

//3 類的私有繼承

class

child3

:private parent};

class

subchild1

:public child3

};

3 類的相容性賦值原則
#include

using

namespace std;

class

parent

int a;};

class

child

:public parent};

void

print

(parent *p)

intmain

(void

)

執行結果

parent printp()

parent printp()

pp->a =

10parent printp()

parent printp

()

4 繼承的構造和析構
#include

using

namespace std;

class

parent

~parent()

void

printa()

private

:int a;};

class

son:

public parent

~son()

void

printb()

void

printab()

private

:int b;

char

*name;};

void

test1()

intmain

(void

)

執行結果

parent

(int a)

son(

int a,

int b)

a =20

b=20

~son()

~parent

()

5父類和子類的成員變數重名
#include

using

namespace std;

class

parent

int a;};

class

child

:public parent

void

print()

int a;};

intmain

(void

)

child::a10

parent :: a100

6 派生類中的static
#include

using

namespace std;

classa;

//1 靜態成員變數要在類的外部初始化

int a::s =10;

classb:

public a

;int

main

(void

)

執行結果

b.s =

10b.s =

100a::s =

100

7 多繼承
#include

using

namespace std;

//家具

class

furniture

;//床

class

bed:

public furniture};

//沙發

class

sofa

:public furniture};

//沙發床

class

sofabed

:public bed,

public sofa};

intmain

(void

)

執行結果

在床上睡覺

----

----

-在沙發上睡覺

----

----

-在沙發上睡覺

在床上睡覺

8 虛繼承

依然是上面的例子,如果不採用虛繼承

class

bed:

public furniture

class

sofa

:public furniture

由於fureniture中有個m變數,所以bed和sofa同時擁有了變數m

class

furniture

;

此時如果同時繼承這兩個類,則 furniture 中的m則存在二義性,即不知道該繼承那個類中的m

class

sofabed

:public bed,

public sofa

//二義性

= 50; //error: non-static member 'm' found in multiple base-class subobjects of type 'furniture':

解決方式: 採用虛繼承,這樣能讓派生類中只產生乙個子物件m

class

sofa

:virtual

public furniture

class

bed:

virtual

public furniture

//二義性--->通過虛繼承解決

sb.m =50;

cout <<

"sb.m = "

<< sb.m << endl;

執行結果

sb.m =

50

C 基礎 4 繼承和派生

在 c 中可重用性是通過繼承這一機制實現的。繼承允許我們依據另乙個類來定義乙個類,這使得建立和維護乙個應用程式變得更容易。這樣做,也達到了重用 功能和提高執行效率的效果。當建立乙個類時,不需要重新編寫新的資料成員和成員函式,只需指定新建的類繼承了乙個已有的類的成員即可。這個已有的類稱為基類,新建的類...

c 繼承和派生

通常子類不加修飾的延續父類的特徵,我們把它叫做繼承 而子類在延續父類特徵的基礎上又新增自己的新特徵,叫做派生。擁有乙個基類的繼承是單一繼承,擁有多個基類的繼承是多重繼承。class 派生類名 派生型別 基類名 注 括號內是派生類自己的成員和成員函式。乙個類的私有成員只能被它的成員函式和友員訪問,不能...

C 繼承和派生

在c 語言中,乙個 派生類可以從乙個 基類派生,也可以從多個基類派生。從乙個基類派生的繼承稱為單繼承 從多個基類派生的繼承稱為 多繼承。派生類的定義格式 單繼承的定義格式如下 1 2 3 4 class 派生類名 繼承方式 基類名 public 表示公有繼承 private 表示私有繼承 prote...