2009-02-12 141 views
17

C++中何時應該使用結構而不是類,反之亦然?當一個成熟的班級管理一些信息看起來像是矯枉過正,但想要指出所包含的信息都是相關的時,我發現自己使用了結構。我想知道什麼時候有一個好的指導方針能夠告訴我什麼時候比另一個更合適?C++中的結構與類

編輯: 發現這些鏈接在閱讀堆棧溢出表示被相關的問題被提交後的材料:

When should you use a class vs a struct in C++?
What are the differences between struct and class in C++?

+0

所以這是一個重複然後 – ChrisW 2009-02-12 22:01:41

回答

14

技術上,兩者之間的唯一區別是,結構是公開的:默認和類是私有的:

其他,沒有技術差異。

結構vs類然後成爲語言純粹表現的細微差別。

通常,您可以避免將複雜的方法放入結構中,並且大部分時間結構數據成員都將保持公開。在一個類中你想強制封裝。

結構=數據是公共的,以非常簡單的輔助方法

類=強烈封裝,數據被修改/只有通過方法來訪問

+0

然而,OP是要求指導方針,這取決於表達的細微差別。我見過 – 2009-02-12 21:56:21

2

使用一個類,如果你有方法,一個結構如果不。

一個類應該隱藏它的所有內部,只暴露方法或屬性。結構往往會暴露它的所有內部結構,並且沒有訪問器方法。

只有一位代碼訪問某些(相關)數據時,結構可能是完全合理的。如果多位代碼需要修改數據或者稍微複雜一點,那麼一個類會是更好的選擇。

5

我用結構爲提供沒有構造或操作類型的簡單容器。

所有其他類。

1

類和Structs之間的區別在於,結構是變量組,類表示對象。對象具有屬性和方法,並且是層次結構的一部分。

如果您使用C++來利用OO功能,最好使用更自然的類/對象。

+0

最佳答案「結構是變量的羣體和階層代表的對象」 – Glolita 2012-04-30 15:49:11

0

就個人而言,我使用的結構,當所有我需要的是數據的容器(無成員函數)。 否則,我使用類。

我唯一一個例外的規則是如果我需要一個簡單的函子:例如

struct compare { bool operator() { ... } }; 
sort(v.begin(), v.end(), compare()); 

需要一個public:標籤只會混淆代碼不必要性。

+0

這幾乎是谷歌的C++指導。並不是說我遵循/喜歡其他許多方面的指導方針。 – 2009-02-12 21:59:30

0

C++中的結構體是具有public的默認訪問方法的類,所以在技術上,除了默認外,沒有區別,您可以同時使用這兩個類。

然而,也有一些期待和自然的傾向,部分原因是由於在C中的結構++來自C.

我的做法:如果有任何私人數據,構造函數/析構函數,或任何複雜的成員函數(做不僅僅是設置/獲取時的轉換等),使用類。

1

我總是用類,甚至只是容器,以保持一致性。它純粹是一種風格的選擇,因爲兩者之間的差異可以忽略不計。

4

當你只需要一個沒有你需要保留的邏輯不變量的「桶」時,使用一個結構體。使用一個類來做其他事情。請參閱C++ FAQ says on the subject

1

如果您需要控制訪問的數據,您應該使用類。如果你不關心誰在訪問什麼,以及他們在那裏存儲什麼,那麼一個結構可能更合適。

此外,如果您需要對數據本身的完整性進行任何檢查,則類更合適。

+1

我在這個答案上找到了兩個看法,這對我來說看起來非常好。是什麼賦予了? – 2009-02-12 22:25:26