[英]C++ setter/getter in one function?
我一直在学习 C++ 课程,其中一个作业要求实现一个图像 class,它具有私有成员的 rows_、cols_、data_。 其中 data 是长度为 X cols 的向量。 他们要求实现一种方法,您可以在给定行和列的情况下访问 data_ 的值,这很好。 但是,他们也希望能够为 position 分配一个值,如下所示:
int val = image.at(row, col);
Image.at(row, col) = 255;
我对我来说似乎很奇怪,如果我返回对 data_ 条目的引用,上述功能会起作用吗? 我觉得你不应该允许 Image.at(row,col) =255; 因为这打破了data_的封装?
以这种方式返回对一些内部数据的引用是很合理的。
如果您非常担心,您总是可以返回一个仅允许对单个像素进行操作的包装器 object,但这可能是矫枉过正。
然而,提供一个 const 正确的 function并不过分。 如果您有一个 const 图像 object 并想从中读取像素,这一点很重要。
所以,你可能有这样的事情:
class Image
{
public:
Image()
: mWidth(0)
, mHeight(0)
{}
Image(int width, int height, const Pixel& color = {})
: mWidth(width)
, mHeight(height)
, mBuffer(width * height, color)
{}
Pixel& at(int row, int col)
{
return mBuffer.at(row * mWidth + col);
}
const Pixel& at(int row, int col) const
{
return mBuffer.at(row * mWidth + col);
}
private:
int mWidth, mHeight;
std::vector<Pixel> mBuffer;
};
请注意,我在这里使用Pixel
来展示返回 const-reference 的更通用形式。 当然,如果您只是使用整数,则 const 版本根本不需要返回引用——它可以只返回int
,而非 const function 仍然会返回int&
。
是的,声明返回引用的方法。
int & at(int row, int col) {return data[row * width + col];}
为 output 分配新值将重写 memory 中分配的data
成员内部某处的数据,因为这是引用指向的位置。
这类似于例如。 std::vector at
基于这是大多数标准容器和迭代器的工作方式,我会说这很好。 请记住const
的正确性并提供 const 访问器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.