Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
jhendrix
0 / 0 / 1
Регистрация: 23.02.2010
Сообщений: 184
#1

Операторы сложения и присваивания - C++

24.09.2010, 18:07. Просмотров 1436. Ответов 6
Метки нет (Все метки)

здравствуйте.
допустим у меня есть класс A.
В этом классе содержатся функции :
A operator=(A &ob);
friend A operator+(A &ob1, A &ob2);
В главной функции main :
A a,b,c;
/***********
здесь операции только над объектами a и b.
************/
// теперь если написать c=a+b; произойдет ошибка, если же написать a+b
// и применить какие-то функции например (a+b).func(); будет работать.
Можете объяснить что происходит?
Почему нельзя сложить a+b --> выполняется дружественная функция , а потом присвоить к объекту (с)
--> оператор функции?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2010, 18:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Операторы сложения и присваивания (C++):

Операторы присваивания, ввода- вывода. Операторы ветвления, выбора
Даны два ненулевых числа. Найти их сумму, разность, произведение, частное,...

Перегрузка операции присваивания и сложения
Необходимо составить описание класса для определения одномерных массивов целых...

Операторы Присваивания
Здравствуйте уважаемые форумчане нуждаюсь в небольшом хелпе) нужно написать...

класс strtype. перегрузка присваивания и сложения
объясните, пожалуйста, что не так: # include <iostream> using namespace...

состовные операторы присваивания
Друзья разъясните мне новичку ), для вас простую истину.... к примеру имеем...

Деструктор вызывается для результата сложения ДО присваивания, и дальше все падает.
Подскажите пожалуйста! Написал класс матриц с перегруженными операторами class...

6
gGrn-7DA
мну довольно <(-__-)l
205 / 194 / 15
Регистрация: 17.01.2010
Сообщений: 2,397
Завершенные тесты: 1
24.09.2010, 18:26 #2
Не помню что бы операторам трбовалось добавлять friend если в качестве операндов используются объекты 1 класса.

Препод говорил, что реализация A operator=(A &ob) возможна, но лучше использовать
A operator=(A &ob1, A &ob2). Или он это про си шарп говорил, там компилятор ругался на подобную конструкцию. Не мог сказать точно...

Да и зачем ссылки на объекты a и b в A operator+(A &ob1, A &ob2) вроде же объеты не изменяются?

а что за ошибку выдает? на момент компиляции или в ходе исполнения? и дейятвительно ли правильно реализован оператор =? сам бы код выложил...

скорее всего ошибка в реализации оператора =...
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
24.09.2010, 18:31 #3
gGrn-7DA, Именно в ней.

C++
1
A operator=(A &ob1, A &ob2)
- не-а. Должно быть именно
C++
1
A&operator=(const A&Ob);
(A &ob1, A &ob2) лучше
C++
1
 (const A&ob1, const A&ob2)
.

А так ТС - код в студию
А еще лучше не пользоваться friend в данном случае.

C++
1
A operator+(const A&Ob);
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
24.09.2010, 20:21 #4
Цитата Сообщение от Lavroff Посмотреть сообщение
C++
1
A operator+(const A&Ob);
Тогда
C++
1
A operator+(const A&Ob) const;
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
24.09.2010, 21:18 #5
Somebody, Не. 3ачем?
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
24.09.2010, 22:28 #6
Цитата Сообщение от Somebody Посмотреть сообщение
Тогда
Тогда лучше так:
C++
1
2
3
const A operator+(const A& rhs, const A& lhs) {
  // ...
}
Всегда предпочтительнее свободные функции, нежели функции члены.
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
25.09.2010, 15:43 #7
Цитата Сообщение от Lavroff Посмотреть сообщение
Somebody, Не. 3ачем?
C++
1
A A::operator+(const A&);
это как
C++
1
A operator+(A&, const A&);
что неприменимо к паре константных объектов.
0
25.09.2010, 15:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2010, 15:43
Привет! Вот еще темы с решениями:

Для класса Vector перегрузить операторы присваивания, сравнения, ввода и вывода
срочно помогите написать программу, желательно с комментариями если можно))...

Нужно перегрузить операторы умножения и сложения
Помогите пожалуйста в этой программе перегрузить операторы умножения и деления,...

Определите для класса Rational операторы сложения, вычитания, умножения и деления
Определите для класса Rational операторы сложения, вычитания, умножения и...

Операторы эквивалентные оператору присваивания\условному оператору?
Здравствуйте уважаемые форумчане) Есть два задания, в которых я не могу понять...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru