我有一个类——它基本上是一堆字段的结构(比如说,像一个二维点;但它只是这个问题的一个综合示例)——我只想要不可变的实例。显然,我可以将数据成员设为私有,并且只有 getter 方法:
class Point2d {
protected:
double x;
double y;
public:
Point2d(double _x, double _y) : x(_x), y(_y) {}
double getX() const { return x; }
double getY() const { return y; }
double norm() const { return x*x + y*y; }
}
但是,我在想也许这样做更好:
class Point2d {
public:
const double x;
const double y;
public:
Point2d(double _x, double _y) : x(_x), y(_y) {}
double norm() const { return x*x + y*y; }
Point2d operator=(const Point2d& p) = delete;
}
编辑:第三种选择是const
在单个变量的声明中仅使用 ness 来强制不变性,类本身是可变的,即
class Point2d {
public:
double x;
double y;
public:
Point2d(double _x, double _y) : x(_x), y(_y) {}
double norm() const { return x*x + y*y; }
}
// ...
Point2d magicalTransformation(const Point2d& p1, const Point2d& p2);
执行不变性的更合理方法是什么?