冗余数据成员

问题描述

我有一个存储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::size应该如何跟踪SquareMatrix::size()的更改?该值可能会在很多地方发生变化,并且使它们保持同步将非常棘手,即使您将其关闭也很难维护。

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

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