|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.07.2010, 01:52 | #1 |
Подтвердите свой е-майл
Регистрация: 13.06.2010
Сообщений: 39
|
Есть готовый пример.Создание функций friend
Здравствуйте. Скажите пожалуйста,правильно ли созданы и работают friend-функции.
Этот код нужно было изменить,так,чтобы все перегруженные операции были реализованы дружественными функциями. Код:
Подскажите пожалуйста,правильно ли я сделал? Код:
|
17.07.2010, 02:44 | #2 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
Скажите, с какой целью вы объявили дружественным классу один из методов этого класса? Я говорю о том методе, где вы производите перегрузку оператора *. По мойму в этом нет смысла. Кроме того AFAIK дружественные функции должны быть определены вне класса как обычные функции; то есть определение функции:
Time operator*(double m, const Time & t) { return t * m; } нужно вынести из класса, оставив в нем только объявление дружественной функции: friend Time operator*(double m, const Time & t); Кроме того, функция перегрузки оператора с такой сигнатурой (она принимает два параметра) AFAIK должна быть по любому определена как обычная функция, а не метод класса. Метод класса перегружающий этот оператор должен принимать только один параметр. Последний раз редактировалось Oleg_SK; 17.07.2010 в 03:01. |
17.07.2010, 03:14 | #3 | |
Подтвердите свой е-майл
Регистрация: 13.06.2010
Сообщений: 39
|
Цитата:
|
|
17.07.2010, 03:28 | #4 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
Aleksandr_Yanov
Похоже, что дружественные функции так все таки можно определять (в теле класса); по крайней мере компилятор не ругается и она вызывается. По этому похоже, что можно оставить код как есть; но я первый раз такое вижу. В общем, все сказанное мной в предыдущем посте можно проигнорировать (я думал, что такой код не будет работать). |
17.07.2010, 03:30 | #5 |
Подтвердите свой е-майл
Регистрация: 13.06.2010
Сообщений: 39
|
Вы бы как реализовали данный пример?
|
17.07.2010, 03:33 | #6 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
Максимально похожим на исходный код; вы похоже так и сделали.
|
17.07.2010, 03:43 | #7 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
Единственное, что пока заметил: почему вы не вынесли
Time operator*(double m) const; в дружественную функцию Time operator*(time t, double m) тогда бы у вас было две дружественные функции, перегружающие оператор *: Код:
Код:
Последний раз редактировалось Oleg_SK; 17.07.2010 в 04:53. |
17.07.2010, 04:01 | #8 |
Подтвердите свой е-майл
Регистрация: 13.06.2010
Сообщений: 39
|
Вы имеете ввиду что нужно было изначально сделать так:
friend Time operator-(int p_hour, int p_minutes, const Time & t) { ... } friend Time operator+(int p_hour, int p_minutes, const Time & t) { ... } Но тогда под таких друзей нужно будет переписывать и функции члены класса Time operator+(),operator-()... Или я Вас не правильно понимаю? |
17.07.2010, 04:39 | #9 |
Подтвердите свой е-майл
Регистрация: 13.06.2010
Сообщений: 39
|
Для каждого оператора судя по всему можно создать дублирующие их дружественные функции.Или я не прав,поправьте.
Код:
Последний раз редактировалось Aleksandr_Yanov; 17.07.2010 в 04:46. |
17.07.2010, 04:47 | #10 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
Aleksandr_Yanov
Перечитайте мой предыдущий пост, т.к. я его недавно отредактировал. Я всего лишь предлагаю убрать из кода объявление и определение метода класса Time перегружающего оператор * (их всего два варианта, а у вас в дружественную функцию вынесен только один из них), заменив его на дружественную функцию; вы все сделали кроме этого... Последний раз редактировалось Oleg_SK; 17.07.2010 в 04:51. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Алгоритм Кнута-Морриса-Пратта или Рабина-Карпа (язык С++). Может у кого-нибудь есть готовый рабочий ? | Беата | Помощь студентам | 7 | 27.03.2010 10:50 |
Нужно положить готовый дизайн на готовый сайт! | Full87 | Фриланс | 1 | 16.12.2009 16:18 |