2009-01-10 35 views
9

在這些情況下,在結構上使用類是否有優勢? (注意:它只會保持變量,絕不會有功能)只有數據的類和結構?

class Foo { 
private: 
    struct Pos { int x, y, z }; 
public:  
    Pos Position; 
}; 

對戰:

struct Foo { 
    struct Pos { int x, y, z } Pos; 
}; 

類似的問題:

+0

錯字:應該是{int x,y,z; } – 2010-11-26 16:45:24

回答

18

有使用了另一種,在C++中沒有真正的優勢,一個結構和類之間的唯一區別是它的成員的默認可見性(結構默認爲公衆,類默認私人的)。

就個人而言,我傾向於更喜歡POD類型的結構,並使用其他類的類。

編輯:litb作出評論好點,所以我要在這裏引用他的話:

一個重要的另一個區別是, 結構從其他 類派生/結構默認爲公衆, 而類則默認由 私下導出。

+6

另一個重要的區別是,缺省情況下,結構默認派生自其他類/結構體public,而派生類是私有的。 – 2009-01-10 18:08:36

-1

「(注:它只會保持變量,絕不會有功能)」

決不是一個大詞。通常「從不」意思是「最終」。既然如此,我建議你使用一個班級。這樣,當事情發生變化時,你就沒有太多的變化。

Java(和Python)人員都很好,一切都是一流的。它沒有傷害他們,因爲沒有C++稱之爲「結構」的這些專用的無方法類。

+1

是的,但有些情況下您必須將C++複合類型與C代碼,系統調用等一起使用。爲了強調C++數據類型是並將保留,只不過是C普通舊數據,我傾向於將其表示爲結構。在所有其他情況下,我使用類。 – 2009-01-10 18:05:19

+0

因此,將其重構爲一個類是相當微不足道的情況下,變得有用。我敢打賭,VS中有一個工具可以爲你做 - 如果你不使用VS,也可以在其他地方使用。 – dkretz 2009-01-10 18:07:43

2

只有類和結構之間的區別在於,默認情況下,結構成員是公共的,並且類成員是私有的。所以我說,選擇你最喜歡的一個。我確信有哪些論點更具可讀性,但我真的認爲這不是什麼大不了的事。

5

structclass平均正是在C++中同樣的事情,不同的是對結構成員和基地的默認訪問是公開的,而它是私有的類。我傾向於選擇結構類,只有公共成員和其他類的類,但它只是一個樣式問題。

0

如果類型的內容沒有內存分配問題(如純int),那麼使用struct就可以了,如果這是您想要去的方式,並且您已經做出有意識的決定,那麼您可以證明那些使用你的代碼的人。但是,如果任何成員是指針類型,那麼您需要認真思考內存管理問題。使用struct可能仍然可以,但更有可能需要析構函數和一些構造函數等等。那時候,你想要一個class

1

基本上,結構和類之間的選擇取決於你的風格和你想要輸入多少。

  • 如果你只有一個類/結構中的公共成員,你不妨使用struct關鍵字。這將節省你不得不在以後輸入「public:」。
  • 在類上選擇結構的另一個原因是隱式地記錄對象的意圖。所以你可以創建POD類型結構體(即使它們包含一個構造函數和一些靜態輔助方法等等),並且你可以對所有其他「常規」類使用class。
6

一方面是結構體通常用於聚合初始化數據結構,因爲所有非靜態數據成員都必須公開(C++ 03,8.5.1/1)。

struct A { // (valid) 
{ 
    int a; 
    int b; 
} x = { 1, 2 }; 

struct A { // (invalid) 
private: 
    int a; 
    int b; 
} x = { 1, 2 }; 

class A { // (invalid) 
    int a; 
    int b; 
} x = { 1, 2 }; 

class A { // (valid) 
public: 
    int a; 
    int b; 
} x = { 1, 2 }; 

class A { // (invalid) 
public: 
    int a; 
private: 
    int b; 
} x = { 1, 2 };