C 從入門到放棄之 C 繼承基本語法

2021-10-23 13:58:09 字數 3213 閱讀 1964

class

/struct 類名:繼承方式 基類,繼承方式 基類,..

.~類名(

void

) 返回值型別 函式名(形參表) 常屬性 異常說明

訪問控制限定符:

資料型別 變數名;

//成員變數

}

#include

using

namespace std;

class

human

void

eat(

const string &food)

void

sleep

(const

unsigned

int time)

private

:protected

: string m_name;

unsigned

int m_age;};

class

student

:public human

void

talk()

void

learn

(const string& course)

private

:unsigned

int m_no;};

class

teacher

:public human

void

talk()

void

teach

(const string &course)

protected

:unsigned

int m_sal;};

intmain()

#include

using

namespace std;

class

base

const

int&

getprivate()

int m_public;

private

:int m_private;

protected

:int m_protected;};

class

derived

:public base

private

:protected:}

;int

main()

子類物件會繼承基類的屬性和行為,通過子類物件可以訪問基類的成員,就如同基類訪問它們一樣

子類物件中包含基類部分稱為基類子物件

概念:

子類型別的指標或引用總可以被隱式轉換為基類型別的指標或引用,

這種操作性縮小的轉化在編譯器看來是安全的,可以直接隱式轉換

作用

在函式引數設計時使用基類型別,可以具有通用性

概念:

基類型別的指標或者引用不能被隱式轉換為其子類型別的指標或引用,

這種將操作性放大的型別轉換在編譯器看來是危險的,不能隱式轉換,但是可以顯式轉換,可以使用靜態型別轉換static_cast《目標型別》(原型別)

classa;

classb:

public a

;class

c:publica;.

..void

func1

(a* pa)

void

func2

(a& ra)

void

func3

(b* pb)

void

fun4

(b& rb)

intmain

(void

)

區域性有限原則

1)訪問控制屬性:影響訪問該類成員的位置

訪問控制 訪問控制 內部 子類 外部 友元

限定符 屬性 訪問 訪問 訪問 訪問

public 公有成員 ok ok ok ok

protected 保護成員 ok ok no ok

private 私有成員 ok no no ok

2)繼承方式:影響通過子類訪問基類中的成員的可訪問性

基類中的 在公有繼承 在保護繼承 在私有繼承

的子類中 的子類中 的子類中

公有成員 公有成員 保護成員 私有成員

保護成員 保護成員 保護成員 私有成員

私有成員 私有成員 私有成員 私有成員

注:向上造型的語法特性在保護繼承和私有繼承中不再適用

classa;

classb:

public a

;a* pa =

new b;

//pa 指標指向子類物件

delete pa;

//該語句呼叫a類的析構函式,而pa指向的卻是子類,不會呼叫子類的析構函式,因此有記憶體洩漏的風險

/*解決方法: 虛析構函式

*/

子類沒有自定義拷貝建構函式,編譯器會為子類提供預設的拷貝建構函式,該函式會自動呼叫基類的拷貝建構函式,完成基類子物件的拷貝初始化

如果子類自己定義拷貝建構函式需要使用初始化列表來顯式指明基類子物件也要以拷貝初始化的方式進行初始化

class

base

;class

derived

:public base

};

子類沒有自定義拷貝賦值函式,那麼編譯器會為子類提供拷貝賦值函式,該函式會自動呼叫基類的拷貝賦值函式,完成基類子物件的賦值操作

如果子類自己定義了拷貝賦值函式,那麼需要顯式呼叫基類的拷貝賦值函式,以完成基類子物件的拷貝賦值操作

class

base

;class

derived

:public base

return

*this;}

};

在重寫子類的操作符過載時,可以復用基類的輸出操作符過載函式,完成對基類子物件成員的輸出操作

C 從入門到放棄之 C 函式

內聯函式 inline 函式是否構成過載關係與函式的返回值型別無關 通過函式指標呼叫過載關係的函式,由函式指標的型別決定匹配過載的版本 呼叫過載關係的函式時,編譯器會根據形參和實參的匹配程度,選擇最優的匹配版本,一般的匹配規則 完全匹配 常量轉換 公升級轉換 降級轉換 省略號轉換 在操作符過載函式 ...

C 從入門到放棄之 多重繼承 鑽石繼承 虛繼承

include using namespace std class base1 int m i class base2 typedef int m i class derived public base1,public base2 int main 1 虛繼承作用 通過虛繼承可以讓公共基類子物件在末...

C 從入門到放棄之 類和物件基本認知

struct class 類名 繼承方式 基類,建構函式 類名 void 析構函式 返回值型別 函式名 形參表 成員函式 資料型別 m 變數名 成員函式 public 公有成員 在任何位置都可以訪問,類的內部和外部都可以訪問 private 私有成員 只有類的內部成員才可以訪問,不可以通過類的物件直...