繁体   English   中英

在简单的Point类中,getter / setter而不是公共成员变量是否存在真正的争论?

[英]Is there any real argument for getters/setters instead of public member variables in a simple Point class?

我有两个简单的类用于处理3d几何PointVector 它们都有3个坐标作为公共成员变量,并定义了一些运算符,如+, -, * ...

class Point
{
public:
    double x, y, z;
    // ctor and some operators   
}


class Vector
{
public:
    double x, y, z;
    // ctor and some operators   
}

是否有任何反对让coordiantes公开的真正理由? 我永远不会改变任何其他类型的double 我不想将x, y, z的值限制在特殊范围内,我不想在设置坐标时检查任何内容。

这些类位于一个库中,供其他项目使用。

更新:
对我来说,对于setter / getter来说,一个很大的缺点就是必须像这样编写/读取代码:

myVec.setX(myVec.x() + 1.0);

代替

myVec.x += 1.0;

Upadate 2:
Qt在QPoint中使用getter / setter但没有任何好处

虽然起初似乎没有明显的优势来限制集体成员的可见性,但它可能在将来发生。

例如,如果在将来某个扩展中你想要将某个属性添加到其值取决于x,y,...值的类中,那么将它们放在私有范围内是非常有价值的,这样它就可以自动获取重新计算。

此外,正如@vandensh所建议的,通过“getters”和“setter”访问数据成员可以帮助检测非法值(请参阅std :: isnan )。

没有一个明确的答案,这实际上取决于用例。

在C ++中,如果只是为了符合统一访问原则 ,我将添加setter和getter; 为什么呼叫者必须跟踪存储的内容和计算的内容?

说到基本数据类型,唯一不变的是范围,我很乐意承认额外的努力可能不值得。 但是类似于Range类型(具有.high,.low,.distance),其中有一个不变的维持(高> =低,距离=高 - 低)那么这是必要的。 否则,该类型的所有客户端最终都必须维护不变量,而这应该是类型本身的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM