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

标签 c++ oop class struct

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

假设我有一个简单的 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_;
}

好吧,但为什么不将其设为具有公共(public) 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;
}

所以我想这个问题的一个子问题是我如何决定何时将成员变量设为私有(private)。我知道面向对象的纯粹主义者可能会说总是,但我不确定这样做有什么好处。

非常感谢。

最佳答案

regarding class vs. struct :

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

regarding getters and setters :

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

关于c++ - 一般来说,如何在 C++ 中的结构体和类之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13543179/

相关文章:

c++ - C++中继承函数的链表中某一点插入的问题

c++ - 如何在 Visual Studio 中选择启动对象?

c++ - 如何查找包含序列 666 的数字?

c++ - OPENCV 桌面捕获

c++ - 关于 std::unique_lock 我应该知道些什么?

c# - 如何检查是基类对象还是派生对象?

oop - Crystal - 如何在父类的子类之间共享属性和/或类型

c# - 如何控制 IEnumerable 的更新

c# - 公共(public)属性(property)定义

php - 使用PHP删除选择中的所有类别子级别