C 繼承入門

2021-10-04 03:57:33 字數 3487 閱讀 2806

class 派生類(子類)名稱 : 繼承方式名(如public)+ 基類(父類)名稱{};

1、公有繼承(public):當乙個類派生自公有基類時,基類的公有成員也是派生類的公有成員,基類的保護成員也是派生類的保護成員,基類的私有成員不能直接被派生類訪問,但是可以通過呼叫基類的公有和保護成員來訪問。對於基類的保護成員,派生類可以進行訪問,但類外不可。

class

person

void

eat(

)void

sleep()

protected

:voida(

)private:

int year;};

class

worker

:public person

void

show()

//基類的私有成員不能被派生類訪問,會報錯

void

show2()

//基類的保護成員能被派生類訪問,不會報錯};

intmain()

2、保護繼承(protected): 當乙個類派生自保護基類時,基類的公有和保護成員將成為派生類的保護成員。

class

person

void

eat(

)void

sleep()

protected

:voida(

)private:

int year;};

class

worker

:public person

void

show()

//基類的私有成員不能被派生類訪問,會報錯

void

show2()

//基類的保護成員能被派生類訪問,不會報錯};

intmain()

3、私有繼承(private):當乙個類派生自私有基類時,基類的公有和保護成員將成為派生類的私有成員。總結:

注:乙個派生類繼承了所有的基類方法,但下列情況除外:

1、基類的建構函式、析構函式和拷貝建構函式。

2、基類的過載運算子。

3、基類的友元函式。

在繼承方式下,派生類獲得了基類成員的乙份拷貝,這份拷貝構成了派生類物件內部的乙個基類子物件。也就是說,在派生類物件中存在乙個基類子物件。所以,基類物件與派生類物件之間存在「賦值相容性」。

基類物件能解決的事情,派生類物件也能解決,情況如下:

1、把派生類物件賦值給基類物件。

2、把派生類物件的位址賦值給基類指標。

3、用派生類物件初始化基類物件的引用。

反之則不行,如下:

1、不能把基類物件賦值給派生類物件。

2、不能把基類物件的位址賦值給派生類物件的指標。

3、也不能把基類物件作為派生物件的引用。

**例項:

class

person

~person()

void

show()

protected

: string myname;};

class

worker

:public person

~worker()

void

show2()

protected

:int myage;};

intmain()

在函式中,如果形式引數是基類物件,也可以用派生類物件作為實參。

分三種情況:

1、形參是基類物件。

2、形參是基類物件的引用。

3、形參是指向基類物件的指標。

class

person

~person()

void

show()

protected

: string myname;};

class

worker

:public person

~worker()

void

show2()

protected

:int myage;};

void

test1

(person p)

void

test2

(person &p)

void

test3

(person *p)

intmain()

多重繼承:即不斷巢狀繼承:

如人類->軍人->軍官。

多繼承:即乙個類從多個類中繼承了屬性即方法等。

基本語法:

class 派生類(子類)名稱 : 繼承方式名(如public)+ 第一基類(父類)名稱, 繼承方式名(如public)+ 第一基類(父類)名稱,… ; 即新增多幾個類,以逗號分隔。

例子:

class

person

~person()

void

show()

protected

: string myname;};

class

soldier

~soldier()

void

show2()

protected

: string mynumber;};

class

headmaster

:public person,

public soldier};

intmain()

先提出菱形繼承的概念:

這種情況的繼承容易出現二義性:假如類 a 有乙個成員變數 a,那麼在類 d 中直接訪問 a 就會產生歧義,編譯器不知道它究竟來自 a -->b–>d 這條路徑,還是來自 a–>c–>d 這條路徑。

因此有了虛繼承。使得在派生類中只保留乙份間接基類的成員。虛繼承的目的是讓某個類做出宣告,承諾願意共享它的基類。其中,這個被共享的基類就稱為虛基類,在這種機制下,不論虛基類在繼承體系**現了多少次,在派生類中都只包含乙份虛基類的成員,就避免了二義性的發生。

使用方法:在繼承方式前面加上 virtual 關鍵字就是虛繼承。

C 入門之 繼承

簡介 繼承 就是在已存在的類的基礎上建立乙個新的類。已存在的類稱為 基類 或者 父類 新建的類稱為 派生 類 或 子類 是物件導向程式設計使 可以復用的最重要的手段,它允許程式設計師在保持原有類特性的基礎上進行擴充套件,增加功能。方式 public 基類訪問許可權保持不變 private 基類的公有...

C 入門1 2 繼承

class derivedclass baseclass 乙個類最多隻允許從乙個其他類派生 derivedclass還可以派生出更多的類。不需要也不能顯式指定繼承是公共 私有還是保護,因為c 的繼承都是公共的。派生類包含基類所有的方法和字段。在派生類中呼叫基類構造器來進行基類欄位的初始化。class...

c 入門之繼承

1.b繼承了a b也有name和adress這兩個字段 此時 a為b的基類 public class a public class b a2.c雖然不是直接從a派生出來的,但它繼承了a的成員 public class a public class b a public class c b3.基類的所...