一般来说,如何在C++中的结构和类之间进行选择
In general, how to chose between a struct and a class in 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纯粹主义者可能会一直这么说,但我不确定它的好处。
非常感谢。
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
- 如何在"push_*()"和"emplace_*()"函数之间进行选择?
- 如何在不同类型的值之间进行选择以传递给多态函数?
- 在C++同名的顶级函数之间进行选择
- 如何让CMake在多个编译器之间进行选择?
- 有没有办法根据模板参数的类型在不同的类实现之间进行选择
- 使用STD :: String和字符数组之间的选择
- 根据编译时条件在类型之间选择类型的惯用方法
- 如何根据定义的字符串类型在“std::cout”和“std::wcout”之间进行选择
- 有没有一种方法可以在基于枚举的可变参数模板函数之间进行选择,这比将函数包装在结构中更简单
- 为什么在具有相同签名的模板化和非模板化函数之间进行选择时没有歧义?
- C++ 在列表和列表之间选择返回类型<<string>std::p air<string,string>>
- C 编译器如何在延期和异步执行std :: async之间进行选择
- 如何在map和undered_map之间进行选择
- 一般来说,如何在C++中的结构和类之间进行选择
- 在一维和二维数组之间进行选择
- unix中选择和轮询系统调用之间的功能差异
- 在模板功能和自动类型扣除之间进行选择
- 在两个函数之间选择的函子
- C 编译器可以在用户定义和编译器生成的复制构建器之间进行自由选择
- 在映射或unordered_map之间选择由计算的双精度值组成的键