2010-01-31 145 views
3

是否有可能讓一個類繼承自一個結構?更具體地說,我如何用一個類來包裝一個C結構體,這樣我就可以將類指針傳遞給需要struct ptr的方法,並在我接收到指針時返回。回調?在C++中使用struct作爲派生類的基礎

(或甚至更具體的類的地址應該是相同的地址相同結構......)

回答

4

你只是從C結構派生。在C++中,structclass之間的唯一區別在於後者的默認成員可訪問性爲private,而前者爲public

如果只涉及單一繼承,class的地址應該與作爲基類的struct相同。如果繼承僅用於實現(即兩者之間不存在Is-A關係),請考慮使用私有繼承。

2

是的,在C++中,一個類是一個具有默認私有成員的結構,而一個結構是一個具有默認公共成員的類。因此一個類可以從一個結構派生。

上的方法中的選擇來包裝結構的B類是在面向對象的設計通常的: B是一個:使用繼承 B包含一個A,使用組合物:使甲一個的memberOf B.

2

根據定義,結構是一個成員默認爲public的類;也就是說,

struct person 
{ 
}; 

是等於:

class person 
{ 
    public: //... 
}; 

另一個不同之處,在默認情況下(不明確的訪問修飾符)類繼承意味着私有繼承,和struct繼承意味着公有繼承。

struct person {...}; 
struct employee : person {...}; 

意味着公有繼承,即存在IS關係和員工與人之間的隱式轉換;

class person {...}; 
class employee : person {...}; 

意味着私人繼承(即員工在關係條款中實現並且員工和個人之間沒有隱式轉換)。

在你的情況下,類和結構是可以互換的;