我有一个类 - 它基本上是一堆字段的结构(比如说,像一个2-D点;但它只是一个综合示例,用于这个问题) - 其中我只想要不可变实例。很显然,我可以使数据成员私有的,只能有getter方法:使用const public成员强制所有实例的不变性是否合理?
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
内斯强制不变性,与类本身是可变的,即
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);
执行不变性的更合理的方法是什么?
不知道,但无论你选择什么,你的方法应该是'const'。 – juanchopanza
@juanchopanza:嗯,当然是的。纠正。 – einpoklum