C CLI思辨錄之再談繼承

2021-09-03 04:55:06 字數 957 閱讀 7143

在物件導向程式設計領域乙個關鍵的概念是繼承。

在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++類:

class a };

class b : public a };

class c : public b };

int main()

根據我前面介紹的規則,在c++中這些**是能成功執行的。但是如果你把它們改變為託管類,則在類c中是不能呼叫fa()的。

C CLI思辨錄之拷貝建構函式

雖然物件複製看上去很簡單,然而如果你沒有對其正確理解,可能會出現一些嚴重問題。預設情況下,複製物件會導致相應的所有成員的複製。如果你只有例項成員,這看上去是相當不錯的。但是如果你的類中含有指向在堆中分配的物件時,情況會怎樣呢?考慮下面的 片斷 include include class person...

C CLI思辨錄之Object的物件布局

c cli相對純c 來說,支援建立託管引用物件,託管物件由虛擬機器來分配記憶體和管理,程式設計師可以不再擔心記憶體洩漏的問題。其實,說白了也就是相當於自己建立乙個記憶體池,並且虛擬機器實際上也是這樣做的。在cli中,所有的類都從object派生,包括int這樣的值。那麼object的內部結構是怎麼樣...

C CLI思辨錄之Object的物件布局

c cli相對純c 來說,支援建立託管引用物件,託管物件由虛擬機器來分配記憶體和管理,程式設計師可以不再擔心記憶體洩漏的問題。其實,說白了也就是相當於自己建立乙個記憶體池,並且虛擬機器實際上也是這樣做的。在cli中,所有的類都從object派生,包括int這樣的值。那麼object的內部結構是怎麼樣...