Перегрузка оператора ( =)
Я только начинающий в языке 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';