2013-10-21 16 views
0

什麼可以算作C#和C++ OOP標準定義之間的可見區別?我特別感興趣的是與超載/超載方法的可視性有關的任何事情。C#與C++:繼承的細節

似乎C#實現了基於堆鏈調用順序的C++繼承順序的子集;真的嗎?或者C#OOP與C++有些不同? (當然,C#具有本機反射支持,但我更感興趣的是發現與繼承有關的問題,或者可能合成)。

是否有一個衆所周知的情況,其中C++中的class N: .. class B: A { }無法訪問C#中可能存在的基類數據(在任何可能的情況下)?


我強烈反對將此問題確認爲「已回答」。 '內部'沒有說,abstract classes can't be clearly evaluated to C++ protected constructor/virtual constructor classes(和整個界面的事情是不同的C + +)。因此,如果我有機會打開它,請不要關閉獎金 - 肯定會有更多的差異。

+0

你是什麼意思「C#實現了基於棧鏈調用順序的C++繼承順序的子集」?這句話對我來說沒有意義。 –

+0

[C#與C++ - 類型,繼承和vtable]可能的重複(http://stackoverflow.com/questions/9727827/c-sharp-vs-c-types-inheritance-and-vtable) –

+0

@BassamAlugili這個問題是關於C#和C++繼承之間的一個特別區別。這個問題是要求所有*的差異,而不是「太寬泛」。 – Servy

回答

2

c++支持多重繼承,而C#不這可能是最大的區別。

2

我相信你可以找到關於這個東西的整本書。一個很大的變化是在C#中定義一個類時,你只能從一個基類繼承。你可以從C++繼承多個。

是否有一個公知的情況,在這種類N:..類B:在C++不能訪問的基類的數據(任何可能的 條件下)A {} 這是可能的在C# ?

如果基類是受保護的或公共的。

protected關鍵字是一個成員訪問修飾符。受保護的成員 可以在其類中以及派生類實例中訪問。 (來源:http://msdn.microsoft.com/en-us/library/bcd5672a.aspx

+0

你能澄清一下受保護的基類嗎?在C++ –

+0

以下工作: 命名空間XX { \t類巢{ \t \t保護: \t \t類零 \t \t { \t \t保護: \t \t \t INT XX; \t \t}; \t \t類ST:零{ \t \t公共: \t \t \t空隙測試(){ \t \t \t \t XX = 1; \t \t \t} \t \t}; \t}; } –

+1

我指的是它們的基類具有可通過派生類類型訪問的受保護成員。我已經更新了我的答案@ kagali-san – gleng