如何在C++中为类的每个成员编写赋值运算符

How to code an assignment operator for each member of a class in C++

本文关键字:成员 赋值运算符 C++      更新时间:2023-10-16

我是C++的新手,现在正在尝试实现一个模型。那么,为类的每个成员重载赋值运算符(作为setter)有意义吗?如果非成员函数试图为私有/受保护的数据成员设置一个新值,这将非常重要。例如:

class Human {
  private:
      double aWeight[100]; /* let's say I want to keep... 
...a set of 100 weight measures of this human.*/
    // member functions and constructors here...
    };

现在,假设我有一个非成员函数来模拟这些测量。。。非成员,因为我有一个大模型,并且我将每个方程作为一个小函数在model.cpp文件中实现。

bool ComputeWeight(Human * humanpt, double energy, int day){
  humanpt->aWeight[day] = energy * 0.8;
}

现在,我开始讨论:很明显,我可以有一个名为setWeight(双倍能量,int-day)的成员函数,并这样做:

bool ComputeWeight(Human * humanpt, double energy, int day){
   humanpt->setWeight(energy, day);
}

然而,在对大型模型进行编码时,计算新的数据成员值并通过集合函数在对象内更新它们是非常不切实际的。他们是否可以为类的每个数据成员编写运算符=的重载代码?因此,对于成员aWeight,我将有自己的运算符=,并像第一个示例中一样继续执行我的计算函数?

为类的每个成员重载赋值运算符(作为setter)有意义吗?

C++不允许为单个成员重载赋值运算符。直接分配给成员的唯一方法是将它们公开,然后根据成员的类型而不是包含类重载分配运算符。

另一方面,您可以(有时也应该)为类的成员提供setter方法。

我认为你把赋值运算符(如c = 10;)和setter方法(如c.setWeight(10);)混为一谈。这是两个完全不同的东西。

附录:

赋值运算符用于将一个对象的数据复制到另一个对象中。允许使用赋值运算符直接设置成员变量的唯一方法是将该成员声明为public。在面向对象编程中,这是不受欢迎的,因为它破坏了封装和数据隐藏。

相关文章: