在类外重载赋值运算符

Overloading Assignment operator outside of class

本文关键字:赋值运算符 重载      更新时间:2023-10-16

我一直在尝试使用朋友类重载类外的赋值运算符,但无论我做什么都不起作用。(是的,我知道约定是重载类中的运算符(。以下是我为使其工作所做的示例:

class Person{
public:
Person(string n){
name = n;
}
friend class assignment;
name = "Joe";
}

}
class assignment{
public:
Person operator&(Person &rhs){
Person test;
test.name = rhs.name;
return test;  //return *this doesn't work
}
}

无论我做什么,赋值运算符都不会在 main 中运行/返回:

Person one("Joe")
person two("Martin");
person three("Anna")
two = three;
std::cout<<two.name; //does not equal the member variable of three;

忽略代码并切入问题的核心,如评论中所述:我只是想知道是否可以在类外运算符重载赋值运算符。 答案是否定的。

[class.copy.assign]明确禁止这样做。我目前手头只有 n4618,所以这就是我要引用的:

用户声明的复制赋值运算符X::operator=是类X的非静态非模板成员函数,只有一个类型为XX&const X&volatile X&const volatile X&的参数。

你可以做各种各样的事情来解决这个问题,但他们不是赋值运算符。