代码之家  ›  专栏  ›  技术社区  ›  anon anon

类外重载赋值运算符

  •  -2
  • anon anon  · 技术社区  · 6 年前

    我一直在尝试使用friend类在类外重载赋值运算符,但不管我做什么都不起作用。(是的,我知道惯例是重载类内的运算符)。这是我为使之工作所做的一个例子:

    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 回复  |  直到 6 年前
        1
  •  1
  •   user4581301    6 年前

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

    [类。复制。分配] 明确禁止。我现在手头只有N4618,所以我要引用:

    用户声明的复制分配运算符 X::operator= 是一个 非静态非模板成员函数 阶级的 X 只有一个类型的参数 , X& 我是说, const X& ,请 volatile X& const volatile X& 是的。

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