пергрузка operator+ и operator+= |
Здравствуйте, гость ( Вход | Регистрация )
пергрузка operator+ и operator+= |
Litkevich Yuriy |
21.4.2010, 12:48
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Дошла очередь до освоения перегрузки этих операторов:
operator+= operator+ В книге Герберта Шилдта по С++, обе эти оператора объявляются и реализуются, как члены класса. А вот у тролей почему-то operator+ повсеместно используется как связанный не-член класса (т.е. описан просто в этом же заголовочнике), ну и соответственно он имеет два аргумента, а не один. Пример: Связанный не-член класса
член класса
Как же правильнее поступать? Делать operator+ членом класса или связанным не-членом obj1 + obj2 + obj3 + ... тут пардон, перепутал с operator= и конструкцией вида obj1 = obj2 = obj3 Я планировал сделать такой перегруженный оператор:
|
|
|
DIMEDROLL |
21.4.2010, 15:30
Сообщение
#2
|
Участник Группа: Участник Сообщений: 165 Регистрация: 28.9.2008 Из: Киев Пользователь №: 304 Спасибо сказали: 23 раз(а) Репутация: 0 |
Пример: Связанный не-член класса
член класса
Как же правильнее поступать? советую обзавестись и почитать книжку Липпман "С++ для начинающих", там в пункте 15.1.1. Члены и не члены класса есть ответ в двух словах: глобальный оператор+ дает возможность плюсовать так:
тоесть char* + QString А если его обьявить как локальный оператор класса, то левым операндом может быть только QString. Тоесть на приведенном коде будет ошибка компиляции. Цитата Итак, на основе чего принимается решение, делать ли оператор членом класса или членом пространства имен? В некоторых случаях у программиста просто нет выбора: • если перегруженный оператор является членом класса, то он вызывается лишь при условии, что левым операндом служит член этого класса. Если же левый операнд имеет другой тип, оператор обязан быть членом пространства имен; • язык требует, чтобы операторы присваивания ("="), взятия индекса ("[]"), вызова ("()") и доступа к членам по стрелке ("->") были определены как члены класса. В противном случае выдается сообщение об ошибке компиляции: З.Ы так же посоветую почитать книги: Мэйерс Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ Саттер Александреску Стандарты программирования на С++ Правила программирования на Си и Си++ Ален И. Голуб Саттер Решение сложных задач на С++ Макконнел Совершенный код, 2-е изд |
|
|
Текстовая версия | Сейчас: 25.11.2024, 12:50 |