c++ - Operator = 在 C++ 中使用 Const 变量重载

标签 c++ operators operator-overloading constants conversion-operator

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

这是我的.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 上的 const 成员。

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

class Patient{
    Doctor &d;
};

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

class Patient{
     Doctor d;
}

但我认为这是不可能的,因为在 Patient 类中使用 setDoctor() 我会制作一个拷贝或更改变量本身。第一个没有任何区别,第二个由于 const 而不可能。我说得对吗?

最佳答案

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

  • 名称不应为 const 限定。 const 不能被修改,这正是我们想要的赋值运算符。

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

  • 正如 Michael Burr 所说:“应该注意的是,如果该类只包含其他已经正确支持赋值的类(如在本例中有一个简单的字符串成员),编译器生成的隐式运算符 = () 会工作得很好。”在您的例子中,唯一的成员 string 有一个正确的 op=。所以明确定义是多余的。

  • Meeh 的解决方案就快完成了。它唯一没有谈论的是 self 分配。阅读FAQ 12 .

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

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

class Doctor {
  string name;
  public:
    Doctor& operator=(Doctor const& o) { 
         if (&o != this) name = o.name;
         return *this;
    }
  // ...
};

关于c++ - Operator = 在 C++ 中使用 Const 变量重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/742545/

相关文章:

python - `foo < bar < baz` 实际调用了哪些方法?

c++ - 重载 < 运算符的正确方法?

c++ - 优先级队列的重载运算符

c++ - 不同类型参数的重载函数?

c# - 如何编写两个参数都是接口(interface)的重载运算符

c++ - 为什么 ~= 是 C++ 中唯一缺少的非逻辑赋值运算符?

python - 在 python 类上重写 __or__ 运算符

c++ - 无等待或无锁初始化

c++ - 调用由 void 指针引用的对象的函数

c++ - 如何使用构造函数(带参数)创建模板类并将该类的方法传递给线程