2

这是一个非常简单的问题,但在某些情况下,我似乎找不到选择一个而不是另一个的一般规则。

假设我有一个简单的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 纯粹主义者可能会说总是,但我不确定它的好处。

非常感谢。

4

2 回答 2

2
regarding class vs. struct :

如果您不需要成员函数,请使用 struct ,否则使用类。

regarding getters and setters :

如果您需要直接访问成员 - 将其公开。将它们设为私有并通过 getter/setter 访问的唯一原因是,如果您在访问它们时需要执行某种处理,例如检查有效性或重新计算其他依赖成员。

于 2012-11-24T17:13:39.177 回答
0

感谢 Bo Persson 提供的链接,我发现以下是相关的答案:

结构的成员和基类默认是公共的,而在类中,它们默认是私有的。注意:您应该明确地使您的基类公开、私有或受保护,而不是依赖默认值。

struct 和 class 在其他方面在功能上是等效的。

好的,足够干净的技术谈话了。从情感上讲,大多数开发人员在类和结构之间做出了强烈的区分。结构感觉就像是一堆开放的位,封装或功能的方式很少。一个类感觉就像是一个活生生的、负责任的社会成员,具有智能服务、强大的封装屏障和定义明确的接口。由于这是大多数人已经拥有的含义,因此如果您的类具有很少的方法并且具有公共数据(这样的东西确实存在于设计良好的系统中!),您可能应该使用 struct 关键字,否则您可能应该使用该类关键词。

您使用哪种风格取决于环境和品味。我通常更喜欢将 struct 用于所有数据都公开的类。我认为这样的类“不是很合适的类型,只是数据结构。

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

于 2012-11-24T17:12:01.477 回答