![]() |
|
Модераторы: bsa |
![]()
|
|
| ChipNDale |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 11.6.2010 Репутация: нет Всего: 1 |
Доброго времени суток.
Скорее всего, данный вопрос уже обсуждался, но мои попытки поиска ничего не дали. Вопрос в следующем. Перегруженные операторы могут быть как методами класса, так и свободными функциями. Есть ли какие-нибудь рекомендации какому способу следует отдавать предпочтение? Также в книгах случалось видеть, что к полям аргументов доступ осуществлялся напрямую - без геттеров (в случае если оператор является методом класса или свободная функция объявлена дружественной). Насколько это хорошая/распространенная практика? |
|||
|
||||
| azesmcar |
|
||||||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Если могут быть свободными функциями, то лучше писать свободные. Методы стоит писать, когда нужен доступ к приватным членам класса. Но одним методом часто не обойтись. Вот типичный пример проблемы с методами:
Можно вызвать оператор следующим образом
в данном случае код будет интерпретирован так
Но если попробуем сделать наоборот - получим ошбику
так как для int нет оператора + принимающего объект типа X. Можно написать свободную функцию для обратной последовательности и вызвать метод.
Если нужен доступ к приватным данным, то метод лучше, чем friend.
Кто не в курсе, friend ... operator в классе объявляет дружественную свободную функцию в ближайшем пространстве имен. If a friend declaration in a non-local class first declares a class or function83) the friend class or function is a member of the innermost enclosing namespace. Вообще, это касается не только операторов. Если функцию или оператор можно написать свободной (т.е. не требуется доступ к защищенным или приватным данным), то ее следует писать свободной. Где-то была уже дискуссия на эту тему..попробую найти. |
||||||||||||
|
|||||||||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
лень переводить
подробнее - http://stackoverflow.com/questions/2770745...member-function -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: -1 Всего: 16 |
Если требуются виртуальные функцыи (изменение поведения в унаследованных классах) -- то только методы (возможно, с обёртками из свободных функцый, как тут рекомендовали, для работы с не самыми левыми значениями).
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |