C++ 重载成员函数以接收赋值?

C++ 重载成员函数以接收赋值?,c++,overloading,assignment-operator,C++,Overloading,Assignment Operator,我想创建一个类的两个方法来访问和修改该实例中的一些数据 例如: int val = image.at(row, col); image.at(row, col) = 255; 是否有方法重载函数,以便在调用image.at(row,col)时允许赋值?您不必为此编写两个方法。只要at返回一个可分配的值(即l值),相同的函数将用于访问和修改数据: struct Image { int& at(int, int); // ^^^^ }; 但是,如果要访问其数据的对象是常量对象,

我想创建一个类的两个方法来访问和修改该实例中的一些数据

例如:

int val = image.at(row, col);
image.at(row, col) = 255;

是否有方法重载函数,以便在调用
image.at(row,col)
时允许赋值?

您不必为此编写两个方法。只要
at
返回一个可分配的值(即l值),相同的函数将用于访问和修改数据:

struct Image 
{
   int& at(int, int);
// ^^^^ 
};
但是,如果要访问其数据的对象是常量对象,则应提供重载:

struct Image 
{
   int& at(int, int);
   int const& at(int, int) const;  // for const objects
};

您不必为此编写两个方法。只要
at
返回一个可分配的值(即l值),相同的函数将用于访问和修改数据:

struct Image 
{
   int& at(int, int);
// ^^^^ 
};
但是,如果要访问其数据的对象是常量对象,则应提供重载:

struct Image 
{
   int& at(int, int);
   int const& at(int, int) const;  // for const objects
};

对于
const
和非
const
实例,也可以有两个版本。这可以防止人们奇怪为什么
at()
函数在特定情况下不起作用。这是最佳实践IIRC。@πάνταῥεῖ “说得好,”他补充道。是的,这当然是一个很好的实践。对于
const
和非
const
实例,也可以有两个版本。这可以防止人们奇怪为什么
at()
函数在特定情况下不起作用。这是最佳实践IIRC。@πάνταῥεῖ “说得好,”他补充道。是的,这当然是个好习惯。