类外的重载赋值运算符

时间:2018-09-07 02:33:16

标签: c++ operator-overloading

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

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;

1 个答案:

答案 0 :(得分:1)

忽略代码并切入注释中所述的问题的核心:我只是想知道是否有可能使运算符在类外重载赋值运算符。答案是否定的。 。

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

  

用户声明的副本分配运算符X::operator=是类X非静态非模板成员函数,具有一个类型为X的正好一个参数,X&const X&volatile X&const volatile X&

您可以做各种事情来解决此问题,但是它们不是赋值运算符。