Оператор присваивания перегрузки вне класса - PullRequest
0 голосов
/ 07 сентября 2018

Я пытался перегрузить оператор присваивания вне класса, используя класс друга, но независимо от того, что я делаю, он не работает. (да, я знаю, что условием является перегрузка оператора внутри класса). Вот пример того, что я делал, чтобы заставить его работать:

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 голосов
/ 07 сентября 2018

Игнорирование кода и врезка в суть вопроса, как указано в комментариях: Я просто хотел узнать, возможно ли перегрузить оператор оператором присваивания вне класса. Ответ - нет.

[class.copy.assign] прямо запрещает это. На данный момент у меня есть только n4618, так что я процитирую:

Объявленный пользователем оператор копирования X::operator= является нестатической не шаблонной функцией-членом класса X с ровно одним параметром типа X, X&, const X&, volatile X& или const volatile X&.

Вы можете делать все возможное, чтобы обойти это, но они НЕ являются операторами присваивания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...