gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:05 26 4
gpt4 key购买 nike

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

这是我的.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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com