[英]Is there any real argument for getters/setters instead of public member variables in a simple Point class?
我有两个简单的类用于处理3d几何Point
和Vector
。 它们都有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.