C 中的繼承模式深入詳解

2022-09-25 03:18:09 字數 1931 閱讀 3407

繼承是oop設計中的重要概念。在c++語言中,派生類繼承基類有三種繼承方式:私有繼承(private)、保護繼承(protected)和公有繼承(public)。

繼承是c++中的重要特性,派生類可以訪問基類中的protected和public成員

先上**:

#include

using namespace std;

class base

;void base::func_pri()

void base::func_pro()

void base::func_pub

class derive:public base

;void derive::function()

int main()

醬在這裡用一段簡單地**為大家說明了繼承的規則。派生類只能訪問基類的public和protected成員,無法訪問private成員;若要呼叫類中private成員,要在類內部使用this指標傳參(關於this指標的用法,醬在後續文章中會為大家進一步整理)。這裡derive是public base,是公有繼承。

上表:首先要確立乙個概念:無論是公有、私有還是保護繼承,說到底它們都屬於繼承,滿足繼承的基本規則(如上表)。無論是private、protected還是public,對於直接向基類繼承的派生類來說幾乎沒有影響(即俗稱的「子代」而非「孫子代」)。上面的**class derive:public base換成private base和protected base,結果都是一樣的。

影響的是派生類的繼承,即「孫子代」。

1.保護繼承

先上**:

#include

using namespace std;

class base

;void base::func_pri()

void base::func_pro()

void base::func_pub()

class derive:protected base

;void derive::function()

class derive_sec:public derive

;void derive_sec::func_sec()

int main()

這段**執行後的結果是public protected。

可以看出的是derive_sec類(子二代)可以呼叫的是base基類的protected和public成員函式,而無法呼叫private成員函式。

2.私有繼承

先上**:

#include

using namespace std;

class base

;void base::func_pri()

void base::func_pro()

void base::func_pub()

classwww.cppcns.com derive:private base

;void derive::function()

class derive_sec:public derive

;void derive_sec::func_sec()

int main()

通過結果來看,derive_sec類(子二代)對base基類中private、protected和public的成員函式均不能呼叫,但其仍然可以呼叫子一代的公有函式。

在三種模式的繼承中,我們可以看出當子一代設定為公有繼承/保護繼承基類時,子二代對基類protected、public成員變數可以訪問,而對private變數不可訪問;當子一代設定為私有繼承基類時,子二代對基類private、protected、public成員變數均不能訪問.

我們可以得出這樣的結論:當基類和派生類具有直接繼承關係時,按照上文所述繼承規則即可;若派生類是經過對基類的多重繼承得來的,則要考慮之前的繼承模式。

private繼承模式在對類之間的封裝性有要求時,可以考慮程式設計客棧使用。

C 中的繼承模式

總結繼承是oop設計中的重要概念。在c 語言中,派生類繼承基類有三種繼承方式 私有繼承 private 保護繼承 protected 和公有繼承 public 繼承是c 中的重要特性,派生類可以訪問基類中的protected和public成員 先上 include using namespace s...

C 中的菱形繼承深入分析

菱形繼承 class person class student public person class teacher public person class assistant public student,public teacher ps assistant的物件中存在兩份person成員 菱...

c 中的封裝 繼承 多型詳解

物件導向有封裝 繼承 多型這三個特性,物件導向程式設計按照現實世界的特點來管理複雜的事物,把它們抽象為物件,具有自己的狀態和行為,通過對訊息的反應來完成任務。這種程式設計方法提供了非常強大的多樣性,大大增加了 的重用機會,增加了程式開發的速度,將具備獨立性特製的程式 包裝起來,修改部分程式 時不至於...