|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.06.2012, 16:48 | #1 |
Пользователь
Регистрация: 26.04.2009
Сообщений: 13
|
Несколько вопросов по классам
1. Зачем в следующем коде в объявлении стоит амперсанд?
2. Что значит RHS и когда его использовать? 3. Зачем стоит звездочка перед rhs.itsWeight? Код:
4.Почему в следующем коде в объявлении оператора преинкремента стоит амперсанд, а в объявлении оператора постинкремента - нет? Код:
5. Почему в следующем коде в описаниях по два раза повторяется слово Counter? 6. Какую функцию здесь несет оператор THIS и зачем перед ним стоит звездочка? Код:
Смех без причины - признак Даламбера.
|
09.06.2012, 17:06 | #2 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Можно, конечно, ответить на все эти вопросы, но явно легче Вам не станет. Почитайте что-нибудь сначала, найдете ответы на все вопросы.
Форматируйте код, будьте людьми.
|
09.06.2012, 17:32 | #3 |
Пользователь
Регистрация: 26.04.2009
Сообщений: 13
|
Ну попробуйте, может пойму. Я знаю, например, что & - возвращает адрес, но причем он тут - "const Counter& Counter:: operator++()" - я не понимаю, адрес класса ведь возвратить нельзя, тут случай сугубо частный, поэтому я даже не знаю какой материал искать.
Смех без причины - признак Даламбера.
|
09.06.2012, 18:22 | #4 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Ваши вопросы означают, что Вы:
1) не знакомы со ссылками 2) не знаком с указателями 3) не знакомы с синтаксисом реализации функций классов Складывается впечатление, что Вы взяли книгу по С++, прочитали отдельно каждую пятую страницу начиная с третьей и стали задавать вопросы, что несколько странно. Теперь ответы. 1) Амперсанд означает ссылку. 2) В данном контексте rhs - имя. Его используют когда хотят его использовать. 3) Звездочка перед rhs.itsWeight стоит, скорее всего, потому что это указатель. Хотя не исключено, что это объект некоторого класса, для которого перегружен operator * (но вряд ли). 4) Преинкремент возвращает ссылку, поэтому там стоит амперсанд. Постинкремент возвращает значение, поэтому там нет амперсанда. 5) Первый - для возвращаемого значения, второй - для области видимости функции. 6) this - указатель на объект класса, для которого вызвана функция. Он неявно передается всем нестатическим функциям. Звездочка перед ним - потому что он указатель на Counter, а возвращаемое значение - Counter или Counter &.
Форматируйте код, будьте людьми.
|
12.06.2012, 19:59 | #5 |
Пользователь
Регистрация: 26.04.2009
Сообщений: 13
|
Спасибо, в большинстве разобрался. Но вот по 4 вопросу: большая ли разница, возвращать оператору ссылку или объект? Лично я в работе программы изменений не заметил, определив оператор сначала так:
Код:
Код:
И ссылку на что возвращает таким образом объявленный оператор?
Смех без причины - признак Даламбера.
|
13.06.2012, 16:08 | #6 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Разница огромная. Возвращая не ссылку, Вы фактически возвращаете копию объекта. Возвращение ссылки означает возвращение именно этого, изменяемого объекта.
Для преинкремента должен работать такой код: Код:
Форматируйте код, будьте людьми.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Несколько вопросов | DeFix | Работа с сетью в Delphi | 3 | 28.11.2011 13:48 |
Несколько вопросов. | Miron86 | Компоненты Delphi | 3 | 09.09.2009 18:25 |
несколько вопросов | fitc | Общие вопросы Delphi | 28 | 14.07.2009 21:20 |
Несколько вопросов | Зубоскалик | Общие вопросы Delphi | 14 | 20.11.2008 14:28 |
Несколько Вопросов | Дорст | Общие вопросы Delphi | 3 | 12.11.2007 09:18 |