C++一个函数中的二传手/吸气手?
C++ setter/getter in one function?
我一直在做一个C++课程,其中一个家庭作业要求实现一个图像类,该类具有私人成员的rows_,cols_,data_。其中数据是长度行 X 列的向量。他们要求实现一种方法,您可以在给定一行和一列的情况下访问data_的值,这很好。但是,他们也希望能够为该位置分配一个值,如下所示:
int val = image.at(row, col);
Image.at(row, col) = 255;
我似乎很奇怪,如果我返回对data_条目的引用,上述功能会起作用吗?我觉得你不应该允许 Image.at(行,列(=255;因为这打破了data_的封装?
以这种方式返回对某些内部数据的引用是相当合理的。
如果你非常担心,你总是可以返回一个只允许操作单个像素的包装器对象,但这可能是矫枉过正。
然而,并不过分的是提供一个恒量正确的函数。 如果您有一个 const 图像对象并希望从中读取像素,这一点很重要。
所以,你可能有这样的东西:
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 引用的更通用形式。 当然,如果你只是使用整数,则 const 版本根本不需要返回引用——它可以只返回int
,而非 const 函数仍然会返回int&
。
是 声明返回引用的方法。
int & at(int row, int col) {return data[row * width + col];}
然后,为输出分配新值将重写内存中data
分配的数据,因为这是引用指向的位置。
这类似于 eg。std::vector at
基于这是大多数标准容器和迭代器的工作方式,我会说它很好。请记住const
正确性,并提供常量访问器。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- C++一个函数中的二传手/吸气手?
- 重载类函数运算符兼任二传手和吸气手
- 哪个更合适:吸气剂和二传手或函数