Страницы

Поиск по вопросам

четверг, 12 декабря 2019 г.

Насколько надо изучающему C++ знать C. Лучший учебник по C++? [дубликат]

#cpp #c #visual_cpp #книги


        
             
                
                    
                        
                            This question already has an answer here:
                            
                        
                    
                
                        
                            Книги и учебные ресурсы по С++
                                
                                    (1 ответ)
                                
                        
                                Closed 4 года назад.
            
                    
Вопрос особенно к мэтрам как @Котик @avp  @mikillskegg @ling @cy6erGn0m
Почитал (пару глав) книгу Стивен Парта Язык программирования C++, но, как понял,
там очень мало полезного. В частности там рассказывается о "строках - массивах символов"
а это по моему С? Я слышал, что в C++ есть класс string с методами. И ещё много таких
примеров а мне кажется, что в книге в основном  рассматриваются не совсем новые методы
программирования (например, "Язык С++ унаследовал от С удобный пакет функций, работающих
с символами"). Действительно, в C++ не так много нового по сравнению с C и всё так
"Объектно Ориентированно". Полистал также "Д.Керниган Д.Ритчи Язык программирования
C", но она показалась "Слегка устаревшей".
Собственно вопросы:


Насколько надо знать C чтобы лучше понять C++?
Какую книгу посоветуете по C++, где упор делается на современное ООП программирование
на C++ и почти сразу описание чего-то типа "Стандартной библиотеки C++" как это в книге
по C?
Насколько нужно знать C чтоб понять C++? 
Насколько различаются C++ и Visual C++ и поддерживаются ли во втором например функции/методы
первого?
Слышал про библиотеки типа "QT", можно ли зная их сделать то же что и в VC++? 

    


Ответы

Ответ 1



Хотя я в метры не попал:), но напишу. 1) Есть мнение, что знание С даже вредит глубокому изучению. Но С можно изучить за 21 день поверхностно, но вот плюсы - вряд ли. 2) Практика. Практика и ещё раз практика. Можно долго читать книги, но безрезультатно. Если хочется стандартную библиотеку узнать - то читать наверно стоит первоисточники - Степанова. 3) "что бы понять рекурсию, нужно понять рекурсию":). Что бы понять с++ нужно понять с++. Или это перефразированный первый вопрос. 4) С++ - это название языка и его спецификация. Visual C++ это реализация его от МС. Ещё к примеру есть gcc, clang и некоторые другие. Это как спросить, чем гоночная машина отличается от болида мерседеса. 5) а погуглите. qt - конкретный фреймворк. VC++ - среда разработки. Смотрите предыдущий вопрос.

Ответ 2



Ответ на вопрос сложен и многогранен. Лучше начать изучение с Си. Т.к. он существенно проще. В программе мероприятий - ознакомление со стандартной библиотекой Си, синтаксисом языка и реализацией базовых алгоритмов. Это позволит понять как это работает. Далее нужно изучить отличия С++ от С. И запомнить их на зубок. Дело в том, что зачастую С++ и С компиляторы - практически одно и то же. Все-таки С++ вырос из Си. И поэтому можнр писать на С++ в стиле Си. Иногда это может быть оправданно, например, ради эффективности по какому-нибудь из критериев, но с другой стороны писать на С++ в стиле Си - скорее всего будет дурным тоном. Но чтобы понимать что можно, а что нельзя нужно знать оба языка. В крайнем случае, никто не мешает использовать С++ как С с классами Обязательно нужно освоить инструментарий. Это компиляторы от Борланда до Ваткома, включая оптимизирующий компилятор от Интела, инструментальные среды, отладчики. Также стоит изучить работу хотя бы с несколькими библиотеками вроде MFC и Qt. Опять же, время потраченное на это не пропадет, т.к. позволит при решении задачи выбрать конкретные языковые средства и конкретные инструменты.

Ответ 3



Можно, нельзя... После С, до С... Возьми и поучи и то, и другое. 100% не прогадаешь. Слышал про библиотеки типа "QT", можно ли зная их сделать то же что и в VC++? И даже больше. С помощью Qt4 можно делать потрясающие интерфейсы. Кроме того, она поставляет кучу полезных библиотек для многопоточного программирования, работ с сетью, с базами данных, с файловой системой. А ее QString - просто потрясающая штука.

Ответ 4



Пожалуй присоединюсь к @gecube. Ничего развернуто писать не хочу, т.к. C++ не люблю, но противопоставлять его Си не хочу. @Rules, IMHO знать Си (и уметь им пользоваться) надо. Я имею в виду не набор функций libc (найдете библиотеку получше - используйте ее или напишите свою), а в основном работу с указателями. Надо хорошо разобраться с распределением памяти, работой со стеком, обработкой сигналов, списками аргументов функций. Иначе понимания "как это на самом деле происходит" (в смысле перелопачивания железом битиков) у Вас не будет. И естественно, системные вызовы (я имею в виду *nix), хотя к языку это почти не относится. Кстати, читал недавно интересный сборник интервью (десятка два, примерно 2007 года, называется "Пионеры программирования") с создателями популярных языков. Интересно, что Страуструп там довольно сдержано говорит об ООП (видимо и в его глазах эта парадигма так и не стала "серебяной пулей"), а позиционирует С++, как "мультипарадигменный" язык с уклоном в системное программирование. И использование STL он не считает применением ООП. Еще там было любопытное высказывания Кернигана (в интервью про AWK), что С++ сложен и огромен и трудно понимать чужие программы, написанные на нем (и еще он упомянул тут же perl), а вот программы на Си просты и понятны. Вот это мне запомнилось, наверное просто совпадает с моими представлениями. А вообще, @Rules - лишних знаний не бывает. Лучше всего любую задачу решать на наиболее подходящем языке (из тех, конечно, какими хорошо владеешь).

Ответ 5



Пытаться изучать С++ без знания С - все равно что пытаться овладеть математикой без знания арифметики. Так что половина заданных вопросов некорректна. Из С важно вынести (в смысле понять) пойнтерную арифметику и управление памятью.

Ответ 6



Совсем необязательно знать С. Это два разных языка хоть и похожи синтаксически. Книга С.Прата офигенна, чувак. Лучшее что я читал. Ну и философия С++ Б.Эккеля Тебе нужна практика. В языке много тонкостей которые можно понять только путем проб и ошибок. По идее VC++ не должен сильно отличаться от стандарта С++. Это просто среда разработки+библиотеки и фреймворки. Смотря что тебе требуется. Каждый из этих инструментов заточен под что-то свое, но в общем и целом они универсальны. Qt для тех кому нужна кроссплатформенность.

Ответ 7



Си можно не знать вообще. Мозг не будет цепляться за сишные идеи. Я прочитал только одну книгу по C++. И то случайно. С++ можно не знать, но понимать стоит обязательно. С++ он и в Visual С++. Для меня он вообще один. Компиляторы чуток разные, да. Да все можно, если заняться.

Ответ 8



Полностью согласен с Mr_OST - нужно рассматривать C и C++ как разные языки, потом будете лишней работой заниматься. Если вам нужно учить С, то учите С, если нужно С++ - то учите С++. В С используется printf/scanf, в С++ программах используются cout/cin В С используется #define, в С++ - const type name; В С управление памятью выполняется с помощью alloc/afree, в С++ new/delete. Таких сравнений можно привести большое колличество. Советую почитать в википедии раздел различия С++ от С: Отличия С++ от C. Особенно примечателен раздел: C++ не включает в себя C Несмотря на то, что большая часть кода C будет справедлива и для C++, C++ не является надмножеством C и не включает его в себя. Существует и такой верный для C код, который неверен для C++. Это отличает его от Objective C, ещё одного усовершенствования C для ООП, как раз являющегося надмножеством C. Существуют и другие различия. Например, C++ не разрешает вызывать функцию main() внутри программы, в то время как в C это действие правомерно. Кроме того, C++ более строг в некоторых вопросах; например, он не допускает неявное приведение типов между несвязанными типами указателей и не разрешает использовать функции, которые ещё не объявлены. Более того, код, верный для обоих языков, может давать разные результаты в зависимости от того, компилятором какого языка он оттранслирован. Например, на большинстве платформ следующая программа печатает «С», если компилируется компилятором C, и «C++» — если компилятором C++. Так происходит из-за того, что символьные константы в C (например, 'a') имеют тип int, а в C++ — тип char, а размеры этих типов обычно различаются.
#include    int main() {
    printf("%s\n", (sizeof('a') == sizeof(char)) ? "C++" : "C");
    return 0; }
Если хотите изучить С++ без С, то советую почитать следующие книги: т.2 Э. Кёниг, Б. My Эффективное программирование на C++ Серия C++ In-Depth Язык программирования С++. Вводный курс. 5-е изд (новое издание, описывает С++11) Солтер Николас А. и др. - С++ для профессионалов - 2006 (на английском языке есть новая версия, описывающая C++11 Professional C++, 2nd Edition) По STL могу посоветовать следующие книги: C++ и STL: справочное руководство, 2-е издание (серия C++ in Depth) C++ Standard Library, The: A Tutorial and Reference, 2nd Edition (данная книга должна выйти в 2013 году на русском языке в издательстве williamspublishing) Параллельное программирование на С++ в действии Еще дополнительно советую почитать книгу Алгоритмы на C++. Фундаментальные алгоритмы и структуры данных.

Ответ 9



Как я понял ответ на мой вопрос очень сложен и многогранен и чтобы не создавать полный хаос и холивар я учту мнения всех участвующих в вопросе оставлю его чтобы задающиеся тем же вопросом что и я могли посмотреть ответы на него и приму свой ответ т.к. не могу точно определиться чей ответ лучше/хуже всех... Всем участвующим спасибо. Я думаю что этот вопрос не когда не будет закрыт для обсуждений но по правилам Хешкод я всё таки должен закрыть его...

Ответ 10



Джесс Либерти: Освой самостоятельно C++ за 21 день. лутше 5ое издание купить. В интернете есть только 3е. Знатоки С++ советуют: С++ изучается без знаний языка С, если язык С уже знаете то надо просто перешагнуть через него на С++. QT своими возможностями обгоняет MFC как мне кажется.

Ответ 11



Недавно сам задавал похожий вопрос: Вопрос Одна из рекомендаций была книга: Р. Лафоре - "Объектно-ориентированное программирование в С++ Сейчас читаю, книгой доволен. Ориентированна как раз на ООП + описан STL и ещё много чего. В общем рекомендую. По поводу надо ли знать С: Выслушав множество мнений пришёл к выводу что С знать не обязательно, и даже вредно. Если учить С то только как отдельный язык.

Комментариев нет:

Отправить комментарий