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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Размещние перегруженных операторов, Как быть? 
:(
    Опции темы
Alastis
  Дата 30.11.2004, 06:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 15.11.2004
Где: Казахстан, Астана

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



Не раз слышал такие рекомендации: "операторы, возвращающие новый обьект обычно помещают вне класса", причем от очень многих людей, но вот скачал Doom 3 SDK и вижу, что там этому предписанию практически не следуют

Код

class idMat2
{
...
  idMat2    operator*( const idMat2 &a ) const;
  idMat2    operator+( const idMat2 &a ) const;
  idMat2    operator-( const idMat2 &a ) const;
...
}


Вот, что прочитал у Липмана:

"Итак, на основе чего принимается решение, делать ли оператор членом класса или
членом пространства имен? В некоторых случаях у программиста просто нет выбора:
• если перегруженный оператор является членом класса, то он вызывается лишь
при условии, что левым операндом служит член этого класса. Если же левый
операнд имеет другой тип, оператор обязан быть членом пространства имен;
• язык требует, чтобы операторы присваивания ("="), взятия индекса ("[]"),
вызова ("()") и доступа к членам по стрелке ("->") были определены как члены
класса. В противном случае выдается сообщение об ошибке компиляции.
В остальных случаях решение принимает проектировщик класса. Симметричные
операторы, например оператор равенства, лучше определять в пространстве имен, если
членом класса может быть любой операнд."

Ну это вроде все элементарно и понятно, да только вот смотрю на реализацию векторов и матриц в Nvidia SDK, а потом на реализацию того же в Doom SDK. Причем первые как раз выносят такие операторы, а вторые нет.

Как же быть?smile

Это сообщение отредактировал(а) Alastis - 30.11.2004, 06:52


--------------------
Прости, что я говорю, когда ты меня перебиваешь.
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 30.11.2004, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата
Не раз слышал такие рекомендации: "операторы, возвращающие новый обьект обычно помещают вне класса"
Так вот, это не обычный случай smile
А вообще, верить на 100% то, что написано в книжках не следует. Случаи бывают разные, и особенности реализации тоже зависят от многих факторов и причин. Так же и от стиля программирования smile

З.Ы.: Но придерживаться рекомендациям следует smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Alastis
Дата 30.11.2004, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 15.11.2004
Где: Казахстан, Астана

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



Цитата
З.Ы.: Но придерживаться рекомендациям следует

Согласен, следует, но ведь в Nvidia не чайники работаютsmile И в id Software я думаю ребята не глупыеsmile Но одни следуют этим рекомендациям, а другие нет при описании одних и тех же классов с одинаковыми перегруженными операторами.
Сдается мне, что в данном случае это просто не принципиально важно. Но тогда - когда это действительно важно?
Хотя слышал я и такое мнение, что
Цитата
В Doom3 много кода, который показался бы невкусным C++ - гурманам


Это сообщение отредактировал(а) Alastis - 30.11.2004, 10:21


--------------------
Прости, что я говорю, когда ты меня перебиваешь.
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 30.11.2004, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Alastis
Цитата
Но тогда - когда это действительно важно?
Это станет важно, когда определитесь с своим стилем программирования.


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Alastis
Дата 30.11.2004, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 15.11.2004
Где: Казахстан, Астана

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



то есть а данном случае - это лишь стиль, а к эффективности никакого отношения не имеет?


--------------------
Прости, что я говорю, когда ты меня перебиваешь.
PM MAIL WWW ICQ   Вверх
Mad
Дата 30.11.2004, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(Alastis @ 30.11.2004, 09:41)
то есть а данном случае - это лишь стиль, а к эффективности никакого отношения не имеет?

Верно. Компилятор все равно преобразет все в прямые адреса, независимо от того где оно расположенно.


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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