冗余数据成员



我有一个存储SquareMatrix的A类。

class A{
private:
SquareMatrix mat;
};

该类经常使用 mat.size()(常量时间操作)来使用矩阵的大小。 mat.size() 实际上是 A 大小的另一个度量。遵循良好的编码实践,A 是否也应该存储 mat.size() 的副本?

class A{
private:
SquareMatrix mat;
int size;
};

如果"mat.size() 确实是 A 大小的另一个度量">,则在此示例中存储表示A大小的数据成员不是一个好主意。

这里的主要问题是:A::size应该如何跟踪SquareMatrix::size()的变化?此值可能会在很多地方发生变化,并且使它们保持同步将很棘手,即使您将其关闭也难以维护。

相反,为A提供一个成员函数,该函数仅返回如下所示的mat.size()结果:

class A{
private:
SquareMatrix mat;
public:    
int size() const { return mat.size(); }  // mat.size() IS A's size :)
};

最新更新