C++/CLI思辨錄之再談繼承
在 面向對象 編程領域一個關鍵的概念是繼承。 在OO和C++中,類成員共有三種級別的繼承:public,protected和private。對于基類成員的存取操作應該依賴于下面兩個因素: 派生類聲明其類頭(public, protected 或 private)的方式 對類成員的存取指定標志(public,
在
面向對象編程領域一個關鍵的概念是繼承。
在OO和
C++中,類成員共有三種級別的繼承:public,protected和private。對于基類成員的存取操作應該依賴于下面兩個因素:
·派生類聲明其類頭(public, protected 或 private)的方式
·對類成員的存取指定標志(public, protected 或 private)
如果你在基類中聲明成員為private,那么這些成員對于任何派生類都是不可存取的。
如果你在基類中聲明成員為protected,而且新類是基類的私有派生,那么這些成員在派生類中變為私有的。
如果你在基類中聲明成員為protected,而且新類是基類的protected 型派生,那么這些成員在派生類中變為protected 的。
如果你在基類中聲明成員為protected,而且新類是基類的public 型派生,那么這些成員在派生類中變為protected的。
如果你在基類中聲明成員為public,而且新類是基類的private 型派生,那么這些成員在派生類中變為private 的。
如果你在基類中聲明成員為public,而且新類是基類的protected 型派生,那么這些成員在派生類中變為protected的。
如果你在基類中聲明成員為public,而且新類是基類的public 型派生,那么這些成員在派生類中變為public 的。
這是一些老式的C++規則。在.Net中,情況就大大不同了-.Net僅支持public繼承。但是當一個類被public繼承,則基類的保護成員將對新的派生類成為private的。
考慮下面的三個C++類:
clearcase/" target="_blank" >cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1">
class A
{
protected: void fa()
{ printf("fa called"); }
};
class B : public A
{
public: void fb()
{ fa(); }
};
class C : public B
{
public: void fc()
{ fa(); }
};
int main()
{
C c;
c.fc();
return 0;
} |
根據我前面介紹的規則,在C++中這些代碼是能成功運行的。但是如果你把它們改變為托管類,則在類c中是不能調用fa()的。
原文轉自:http://www.kjueaiud.com
- 評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
-
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
|