![]() |
|
Модераторы: bsa |
![]()
|
|
| v_enom |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 11.10.2006 Репутация: нет Всего: нет |
Ребята, помогите понять константы (листинг 19.2 книги С++ за21 день д.Либерти)
вот есть перегруженный оператор T& operator[], которые возвращает ссылку, почему-то для используется другая реализация перегруженного оператора Array<T>::Array(const Array &rhs) с константой const T& operator[]. Почему так - не понятно. в main эта функция Array<T>::Array(const Array &rhs) вызывается при присваивании.
остальной код
|
||||
|
|||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
ну так rhs у тебя константная ссылка, вот и вызывается наиболее "близкий" по типу аргумента operator[].
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| v_enom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 11.10.2006 Репутация: нет Всего: нет |
не понял. Обяъсни связь между тем, что rhs у меня константа и тем, что я возвращаю ссылку на константу. К тому же мне не понятно, почему сама rhs - константа. По идее я же могу менять значния содержимого в rhs, если я напишу еще функцию и она будет это делать! |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| v_enom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 11.10.2006 Репутация: нет Всего: нет |
ни чего не понял, пожалуйста объясните понятно с примерами. Я же разбираю новый материал... 1. почему rhs обязательно как константная ссылка должна быть? ведь я не создаю Array<Animal> const newZoo; или что-то типо того. от куда тогда необходимость в констанотности появляется? при передаче? так какой в ней смысл тогда, если я все равно newZoo не делаю константой.... 2. почему возвращаться должна обязательно const T& ? ведь есть просто T& для operator[] ???? почему так отличается объявление в классе от реализации:
а??? Это сообщение отредактировал(а) v_enom - 4.6.2009, 19:23 |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
вам стоит почитать про перегрузку вообще и про константность в целом.
начинте с этого: http://habrahabr.ru/blogs/cpp/59558/ ну и книжки и гугл подскажут. напишите простые классы с пустыми функциями и выводом в них вроде std::cout<<"cont foo() called\n"; и проанализируйте как будет компилятор выделять что вызывать. И вообще на это есть стандарт.
тут про специализацию: http://habrahabr.ru/blogs/cpp/54762/ -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Вот Вам простой пример, поняв который разберетесь и со своей задачей.
Подсказка : если this указатель на константу, то следовательно вызовется константная версия. Т.е const написанная после функции является модификатором скрытого параметра this. |
|||
|
||||
| v_enom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 11.10.2006 Репутация: нет Всего: нет |
спаибо, буду обмозговывать!
|
|||
|
||||
![]()
|
| Правила форума "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. |