运算符 = C++ 中使用 Const 变量重载

2023-11-26

我想知道你们是否可以帮助我。

这是我的.h:

Class Doctor {
   const string name;
   public:
       Doctor();
       Doctor(string name);
       Doctor & Doctor::operator=(const Doctor &doc);
}

和我的主要:

int main(){
    Doctor d1 = Doctor("peter");
    Doctor d2 = Doctor();
    d2 = d1;
}

我想做operator=函数。谁能帮我?注意 Doctor 上的 cons 成员。

************编辑:********* 我的主要问题是我希望另一个类有一个属性,即医生,就像病人有医生一样。但我希望能够改变我的医生。就像我正在看医生 A,但我想看医生 B。这可以使用我的另一个类(Pacient)中的 setDoctor 函数来完成。如果是我写代码,我会这样说:

class Patient{
    Doctor &d;
};

然后更改指针。然而,我使用的是一位老师制作的基本代码,它的类定义如下:

class Patient{
     Doctor d;
}

但我认为这是不可能做到的,因为使用 Patient 类中的 setDoctor() 我要么制作一个副本,要么更改变量本身。第一个没有任何区别,第二个由于 const 是不可能的。我对吗?


你快到了。几个值得注意的点:

  • 名字不应该是const合格的。 Aconst不能被修改,这正是我们在赋值运算符中想要的。

  • C++ 关键字是class并不是Class因为你的代码有它(它会给你编译错误)

  • 正如 Michael Burr 所指出的:“但应该注意的是,如果该类仅包含已经正确支持赋值的其他类(如本例中使用简单的字符串成员),则隐式的、编译器生成的运算符 =() 将正常工作”。就您而言,这里是唯一的成员string有一个适当的op=。所以明确定义是多余的。

  • Meeh 的解决方案已经差不多了。它唯一没有谈论的是自我分配。读FAQ 12.

  • 赋值是三大成员函数之一常见问题27.10。查一下。它说,要求实现 copy ctor、op= 或 dtor 之一通常意味着您还需要实现其他两个。

更正后的代码示例应该是这样的:

class Doctor {
  string name;
  public:
    Doctor& operator=(Doctor const& o) { 
         if (&o != this) name = o.name;
         return *this;
    }
  // ...
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运算符 = C++ 中使用 Const 变量重载 的相关文章

随机推荐