C 繼承問題

2021-06-23 09:14:57 字數 1382 閱讀 2632

c++的三大特性:封裝, 繼承, 多型 

如何實現繼承是c++中基本的核心的部分。

我在此就自己的認識理一理繼承問題;

情形1:

單繼承: 單繼承是最簡單的繼承方式, 其中繼承許可權分為 public ;protectsd和 private三種。

class a;

很顯然b是滿足is-a性質的公有繼承。 

訪問許可權如下:

首先, 類b公有繼承自a, 類b可以訪問類a中的公有成員和保護成員。類b的物件只能訪問類a中的公有成員。

類c私有繼承自a, 類c可以訪問類a中的公有成員和保護成員, 類c物件無法訪問類a中的成員;

類d保護繼承自a, 類d可以訪問類a中的公有成員和保護成員, 類d物件無法訪問類a中的成員。

如果再有類繼承自c或者d則訪問關係可以以此類推。

多重繼承:

多重繼承的內部分析: 

1. class a;

class b

class c: public a, public b{}

c c;

a *p1 = c 與b *p2 = c; 其中p2在指向c的時候在內部進行了轉化 p2 = (b*)(&c + sizeof(a));

虛擬繼承:

虛擬繼承的內部分析:

虛擬繼承是多重繼承的特有概念, 是為了解決多重繼承中的問題而提出的。                            

產生乙個虛指標指向基類。

首先分析下公有繼承,保護型繼承和私有繼承:

公有繼承很好理解, 就是要塑模出is-a的特性,就是要求用此類的使用者不會誤解你的意思。

如 class bird;  類的繼承表達了企鵝可以飛,但是現實中確不是如此的。這就是亂用了公有繼承。

私有繼承: 

私有繼承  的含義是根據某物塑模出東西來,一般是不要派生類訪問基類的保護型成分, 或者為了重新定義虛函式,而不讓派生類中public出基類的虛函式,所採用的設計方法;

多重繼承和虛繼承之間的關係:

再講一下虛擬成員函式:.

多重繼承中虛擬成員函式是很難實現的, 複雜度很高。

主要在於第二個基類的實現, 問題1 虛擬的析構函式,問題二: 基類2中的其他非虛函式, 問題三: 虛函式;

需要在執行期加入位置偏移的**。

並且需要分開來訪問:

#include "stdafx.h"

#include

using namespace std;

class base1

virtual void g();

};class base2

virtual void h(){};

};class c :public base1, public base2

};void main()

C 繼承問題

1 整合式從上到下的繼承,不能講派生類的屬性和行為賦給其基類 2 派生類不能繼承基類的建構函式和析構函式 3 所有的多充繼承都可以通過單一繼承來實現,當某個類使用多繼承時,積累的數量沒有限制 4 如果遇到基類與其派生類命名衝突的情況下,在進行呼叫時,如果呼叫基類的成員變數,必須通過全域性分辨符 對其...

c 中繼承問題小結

1.c 中繼承有公有繼承,保護繼承,私有繼承 定義個基類 include using namespace std class base public void display cout huang endl protected int x private int y 定義乙個派生類 公有繼承 派生類...

C 多重繼承相關問題

分類 c 2012 02 10 18 03 2758人閱讀收藏 舉報c 編譯器symbian class caccess 多重繼承的問題,首先想到多繼承建構函式如何處理?symbian下是可以乙個c類多個m類多重繼承的 c 中的多繼承,建構函式處理並沒有問題,物件構造的時候按照繼承中宣告的順序呼叫多...