Перегрузка оператора ( =)

Я только начинающий в языке C++, и у меня есть несколько вопросов по этому коду. Я пытаюсь перегрузить некоторых операторов.

string& operator = (char R) { string T = R ; *this = T; return *this; }

Первый вопрос: почему мне нужно перегрузить оператор равенства, в то время как конструктор может сделать эту работу?
Второй вопрос: (не связано) Что (char R) средства?

4 ответа

Решение

Первый вопрос: почему мне нужно перегрузить оператор равенства, в то время как конструктор может сделать эту работу?

Конструктор предназначен для "конструирования" объекта... в то время как существует нечто, называемое копирующим конструктором, он не предназначен для фактического копирования уже существующего объекта в другой уже существующий объект того же (или конвертируемого) типа... это работа operator=, Также вы не перегружаете operator= метод, а скорее создание пользовательской версии метода, который будет использоваться вместо метода, созданного компилятором по умолчанию для типа объекта, который просто перебором копирует биты памяти одного объекта в другой... если ваш объект управляет своими собственными указателями и т. д., такая грубая копия может быть очень плохой вещью, поскольку владение указателем становится неоднозначным и т. д.

Перегрузка операторов в C++ . Одна из лучших версий здесь.

http://msumca2012.blogspot.in/2013/03/oop-41-operator-overloading-in-c.html

(char R) является аргументом для оператора так же, как у вас есть аргумент для нормальной функции.

(char R) является правым аргументом оператора (здесь =)

Вы хотите сделать это, чтобы вы могли установить значение после инициализации

//constructor
Foo a('f')
//copy constructor
Foo b = Foo('p');
// operator=
b = 'g';
Другие вопросы по тегам