一般来说,如何在C++中的结构和类之间进行选择

In general, how to chose between a struct and a class in C++

本文关键字:之间 选择 行选 结构 C++ 一般来说      更新时间:2023-10-16

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

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

非常感谢。

regarding class vs. struct :

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

regarding getters and setters :

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

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

默认情况下,结构的成员和基类是公共的,而在类中,它们默认为private。注意:你应该做好你的基础类显式公开、私有或受保护,而不是依赖默认值。

结构和类在其他方面是等效的。

好吧,听够了那种干净的科技谈话。情感上开发人员对类和结构进行了严格的区分。A.结构感觉就像是一堆开放的位封装或功能的方式。上课感觉就像是一种生活拥有智能服务的负责任的社会成员封装屏障和定义良好的界面。既然那是大多数人已经拥有的内涵,你可能应该使用struct关键字,如果您有一个方法很少的类,并且公共数据(这样的东西确实存在于设计良好的系统中!),但是否则,您可能应该使用class关键字。

你使用哪种风格取决于环境和品味。我通常更喜欢对所有数据都是公共的类使用struct。我想到诸如"不是很合适的类型,只是数据结构

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