![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Tobuk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 20.11.2008 Репутация: нет Всего: нет |
Знаю С++ на уровне классов, шаблонов перегрузок и прочего.
Знаю наследование const ссылки и прочее, но пользоваться ими не умею. (ни как не найду где их использовать) Не люблю С++. Люблю Си. Так бы и писал на Си, но все вокруг пишут на С++. Хвалят его. Любят его. Это не дает мне покоя. Как же выучить С++ на столько, чтобы полюбить его? Как найти применение всяким mutable и наследованию? Как делать такие же вещи, как Александреску и чувствовать себя крутым программистом С++? |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Судя по всему, это нормально.
Это сообщение отредактировал(а) Void - 22.11.2009, 23:56 -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
Abyx |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
||||
|
||||
niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 0 Всего: 0 |
А ты в своих программах попробуй использовать STL. Вот тогда поймешь что такое С++. И увидишь на сколько упрощается код программы.
Наследование - оно везде наследование. ничего нового в нем нет. mutable - такое же г* как и const_cast<>(). Александреску - нерд. --------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
Tobuk, попробуй написать программу >500кб исходников ) Поймешь, что такое ООП и почему он делает мир проще ;)
|
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Посмотри в сторону библиотек для С++. Boost, Ogre и т.д. на любой вкус и цвет. Напиши что нибудь с их использованием. Например Boost Asio...
Это сообщение отредактировал(а) Леопольд - 23.11.2009, 09:11 -------------------- вопросов больше чем ответов |
|||
|
||||
Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
это нормально, С++ - сильно перегружен различными концепциями, программируя на Си, ты просто пишешь код, который работает с данными в памяти через указатели и тд., программируя на С++ ты описываешь типы данных, которые описывают различные объекты, расположенные в памяти и операции над этими объектами, в принципе, для простых вещей, это лишний overhead, но для сложных - данный подход дает ощутимые преимущества главное, нужно заниматься этим не для того, что-бы чувствовать себя крутым программистом лично я пишу на определенном подмножестве с++, это сильно упрощает дело пример, код на Си:
что можно сказать о значении переменной a, после вызова А (речь идет о Си)? то, что оно не изменится после вызова Б, значение переменной может измениться, так-как по вызову видно, что в ф-ю передается указатель на int теперь аналогичный код на С++:
теперь о значении переменной после вызова А ничего нельзя сказать, потому-что в С++ есть ссылки, и Foo вполне может принимать не константную ссылку в качестве параметра и изменять значение переменной. Поэтому, я не пользуюсь не константными ссылками в сигнатурах функций/методов, в этом случае, я могу с уверенностью сказать, изменится ли значение переменной после вызова А или нет, глядя на вызов ![]() ну и таких мелочей достаточно много |
||||
|
|||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Это страшный сон, товарищи! ![]() ![]() -------------------- |
|||
|
||||
Abyx |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
Lazin, проще смотреть на сигнатуру Foo
или писать
чем вводить ограничение на использование ссылок |
|||
|
||||
niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 0 Всего: 0 |
Abyx, Да нет, не проще. Сам пользуюсь таким же принципом. Если в функцию нужно передать объект(при условии что сам объект не модифицируется), то по константной ссылке. А если предполагается изменение объекта вне самой функции, то по указателю.
Добавлено через 2 минуты и 39 секунд kemiisto, Вам сюды ;) Это сообщение отредактировал(а) niXman - 23.11.2009, 19:07 --------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
Abyx |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
указатель != ссылка, такая замена только для повышения читабельности кода, в общем случае неравноценна.
конечно, если в коде ссылки можно безболезненно заменить на указатели, это другое дело, но это действительно очень узкое подмножество С++ Добавлено через 9 минут и 57 секунд и да, редко бывают правила одинаково хорошо подходящие ко всем ситуациям. вот например сегодня читал документацию spirit2, там сделали
имхо это гораздо лучшее решение, чем было в 1.8
Это сообщение отредактировал(а) Abyx - 23.11.2009, 19:19 |
||||
|
|||||
powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
В чём разница, кроме неявного приведения типов в случае константной ссылки? Стиль, который использует Lazin, рекомендуют, наверное, в любой книге по ++. Во всяком случае Страуструп точно. |
|||
|
||||
PRF |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 13.10.2007 Репутация: нет Всего: нет |
я считаю, что этот вопрос "выучить чтобы полюбить" это бред...
вы можете полюбить жигули когда узнали все о ней полностью?)) ну грубое сравнение , но все же)) таких примеров можно много написать) но я не могу)) хз) я просто хотел сказать, что чтобы полюбить, точно не поможет знание о нем все, вот вы любите СИ чистый, так же наверно как я люблю С++ )) и не потому что он предоставляет там ух как много всего) но я просто получаю удовольствие если пишу на нем, + функционал)) |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
1. ссылка легко оптимизируется компилятором 2. не надо проверять на нуль (или какие то дополнительные (условные) гарантии заменяющие проверку) 3. явно видно что функция не может принимать ноль как аргумент 2 и 3 й пункт, несмотря на кажущуюся близость, не одинаковы. 2й - взгляд изнутри (разроботчика), а 3й снаружи (пользователя). |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
не проще, вызов в одном месте, сигнатура - в другом ну и как константу передать в ф-ю, принимающую не константную ссылку? ![]() указатель - то-же
с этим согласен, но у нас ведь еще есть константные ссылки, которые можно использовать в большинстве таких случаев ![]() к тому-же, найти, где и когда был разыменован нулевой указатель - очень легко, а найти баги, связаные с тем, что программист не ожидал того, что состояние объекта будет изменено - намного сложнее, поэтому я пожалуй останусь при своем мнении ![]() Это сообщение отредактировал(а) Lazin - 24.11.2009, 10:53 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |