问题描述
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 :)
};