2012-11-24 41 views
2

所以這是一個非常簡單的問題,但我似乎無法找到在某些情況下選擇一個的一般規則。一般來說,如何在C++中選擇一個結構體和一個類

比方說,我有一個簡單的Point類,像這樣:

class Point 
{ 
public: 
    Point(); 
    Point(double, double, double); 

    Point(const Point& other); 
    Point& operator=(const Point& other); 

    bool operator==(Point& lhs, Point& rhs); 

    void translate(double, double, double); 

    double getX() const; 
    double getY() const;  
    double getZ() const; 

    void setX(const double); 
    void setY(const double); 
    void setZ(const double); 

private: 
    double x_, y_, z_; 
} 

所有好,但爲什麼不公開與X,Y,Z使之成爲結構和節省一半的代碼?

另一個例子可以說我有一個Header結構是這樣的:

struct Header 
{ 
    short int id; 
    short int version;   
    size_t indexOffset; 
    size_t indexSize; 
} 

在什麼情況下我想使它成爲一個類?也有上面有什麼東西有什麼區別,我也看到了質量這樣的代碼:

class Header 
{ 
public: 
    short int id; 
    short int version;   
    size_t indexOffset; 
    size_t indexSize; 
} 

所以我想一個子問題,這是我該如何決定何時成員變量私有。我知道OO純粹主義者可能總會說,但我不知道這個好處。

非常感謝。

+2

http://stackoverflow.com/questions/2750270/cc-struct-vs-class – Caribou

+0

also http://stackoverflow.com/questions/146452/what-are-pod-types-in-c – Caribou

+1

http: //sackoverflow.com/questions/92859/what-are-the-differences-between-struct-and-class-in-c?rq=1 –

回答

2
regarding class vs. struct : 

使用結構,如果你不需要的成員函數和類除外。

regarding getters and setters : 

如果您需要直接訪問成員 - 讓他們公開。通過getter/setter使它們變爲私有和訪問的唯一原因是,如果您在訪問它們時需要執行某種類型的處理,例如檢查有效性或重新計算其他依賴成員。

+0

好吧,仍然OO純粹主義者可以說:如果有一天你需要在獲取或設置變量時進行一些檢查,那麼它們都應該是私有的。 – jaho

+0

我想說,當我需要檢查時,我會添加它。但是,私有/公共成員可能會遇到另一種類型的問題:如果您在一個非常大的團隊中工作或者將您的資源分散開來,那麼不要暴露容易受到損壞的部分是明智的,但可以創建某種類型的API並允許通過此API訪問僅用於防火牆的不良行爲和無效參數。即使在這種情況下,在內部,你的課程仍然可以像你想要的那樣公開。 – lenik

0

由於鏈路由博佩爾鬆提供我發現下面是一個相關的答案:

一個結構的成員和基類默認都是公有的,而類 ,它們默認私有。注意:您應該使您的基地 明確公開,私人或受保護,而不是依靠默認值 。

結構和類在功能上是等價的。

好吧,足夠的那個尖銳的清潔技術講座。在情感上,大多數開發人員在類和結構之間進行了很強的區分。一個 結構只是感覺像一堆開放的堆,封裝或功能的方式很少。一個班級感覺像一個生活和社會的負責任的成員與智能服務,強大的 封裝障礙,以及界定明確。由於 是大多數人已經擁有的內涵,所以如果你有一個方法很少的類,並且有公共數據(這些東西確實存在於精心設計的系統中!),你應該可以使用 struct關鍵字,但是 否則你應該可能使用class關鍵字。

你使用哪種形式取決於環境和品位。我通常 更喜歡使用結構的公開所有數據的類。我認爲 這樣的類「不太合適的類型,只是數據結構。

來源:
http://www.parashift.com/c++-faq/struct-vs-class.html
http://www.amazon.com/dp/0201700735/?tag=stackoverfl08-20

相關問題