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 中的多繼承,建構函式處理並沒有問題,物件構造的時候按照繼承中宣告的順序呼叫多...