Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перегрузка оператора сложения 
V
    Опции темы
sidd
Дата 1.3.2010, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 7.10.2006
Где: Киев

Репутация: нет
Всего: нет



Перегружаю операторы присваивания и сложения:
Код
  MyType &operator =(MyType &a) {

      this->value = a.value;

    return *this;
  }

  MyType operator +(MyType &a) {

    MyType c;

      c.value = this->value+a.value;

    return с;
  }

Объекты складываются, но почему-то не могу присвоить эту сумму другому объекту:
Код

    MyType a1, a2, a3;

      a1 = a2+a3;

Ошибка: Could not find a match for 'MyType::operator =(MyType)' in function main()

Помогите, пожалуйста, разобраться. Нужно именно, чтоб работала конструкция a1 = a2+a3.
PM MAIL WWW ICQ Skype Jabber   Вверх
bsa
Дата 1.3.2010, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



sidd, потому что забыл const указать.  В частности, операция сложения рекомендуется делать внешней функцией, которая использует оператор +=:
Код
class MyClass
{
public:
   //MyClass(const MyClass &); //конструктор копирования, если есть, то должен иметь такую сигнатуру
   MyClass& operator+=(const MyClass &); //обрати внимание на const - это важно
   MyClass& operator=(const MyClass &); //обрати внимание на const - это важно
};

inline MyClass operator+(const MyClass &c1, const MyClass &c2) //обрати внимание на const - это важно
{
   return MyClass(c1) += c2;
}

PM   Вверх
sidd
Дата 1.3.2010, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 7.10.2006
Где: Киев

Репутация: нет
Всего: нет



bsa, спасибо большое.
PM MAIL WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.