冗余数据成员

Redundant Data Members

我有一个 class A 存储一个 SquareMatrix。

class A{
private:
    SquareMatrix mat;
};

class 经常使用 mat.size() (常数时间操作)矩阵的大小。 mat.size() 确实是 A 大小的另一种度量。按照良好的编码习惯,A 是否也应该存储 mat.size() 的副本?

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

如果 "mat.size( ) 确实是 A.

大小的另一种度量

这里的主要问题是:A::size 应该如何跟踪对 SquareMatrix::size() 的更改?这个值可能会在很多地方发生变化,让它们保持同步会很棘手,即使你做到这一点也很难维护。

相反,为 A 提供一个 成员函数 ,它只是 returns mat.size() 的结果,如下所示:

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