我想知道你们是否可以帮助我。
这是我的.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/