我一直在尝试使用一个朋友类来重载类外的赋值运算符,但是无论我做什么都不起作用。 (是的,我知道约定是在类内部重载运算符)。以下是我为使其正常工作所做的一个示例:
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;
答案 0 :(得分:1)
忽略代码并切入注释中所述的问题的核心:我只是想知道是否有可能使运算符在类外重载赋值运算符。答案是否定的。 。
[class.copy.assign] 明确禁止使用。目前我手上只有n4618,所以这就是我要引用的内容:
用户声明的副本分配运算符
X::operator=
是类X
的非静态非模板成员函数,具有一个类型为X
的正好一个参数,X&
,const X&
,volatile X&
或const volatile X&
。
您可以做各种事情来解决此问题,但是它们不是赋值运算符。