Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

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

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

24.09.2010, 18:07. Просмотров 1351. Ответов 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++):

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

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

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

класс strtype. перегрузка присваивания и сложения - C++
объясните, пожалуйста, что не так: # include <iostream> using namespace std; class strtype { char *p; int len; ...

состовные операторы присваивания - C++
Друзья разъясните мне новичку ), для вас простую истину.... к примеру имеем инструкцию х = х + 10; "Используя составной оператор...

Деструктор вызывается для результата сложения ДО присваивания, и дальше все падает. - C++
Подскажите пожалуйста! Написал класс матриц с перегруженными операторами class Matrix3d{ public: double** matrix; Matrix3d(); ...

6
gGrn-7DA
мну довольно <(-__-)l
203 / 192 / 1
Регистрация: 17.01.2010
Сообщений: 2,392
Завершенные тесты: 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
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,198
Завершенные тесты: 1
24.09.2010, 20:21 #4
Цитата Сообщение от Lavroff Посмотреть сообщение
C++
1
A operator+(const A&Ob);
Тогда
C++
1
A operator+(const A&Ob) const;
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.09.2010, 21:18 #5
Somebody, Не. 3ачем?
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 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
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,198
Завершенные тесты: 1
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 перегрузить операторы присваивания, сравнения, ввода и вывода - C++
срочно помогите написать программу, желательно с комментариями если можно)) Для класса Vector перегрузить операторы присваивания, ...

Нужно перегрузить операторы умножения и сложения - C++
Помогите пожалуйста в этой программе перегрузить операторы умножения и деления, буду очень благодарна.. #include &lt;utility&gt; #include...

Определите для класса Rational операторы сложения, вычитания, умножения и деления - C++
Определите для класса Rational операторы сложения, вычитания, умножения и деления, так чтобы объекты типа Rational можно было складывать...

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


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

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

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