Чем хорош С++?

Уже долгое время не прекращаются споры, что лучше: Delphi или C / C + + / Visual C + +. Причем в большинстве случаев сравниваются две принципиально разные вещи. Ведь до седьмой версии имя Delphi носила только среда разработки, а языком ее компилятора была Object Pascal (в Delphi7 борландовцы решили устранить такое упущение, и теперь язык называется Дельфи). То же самое и с Visual C + +: эта IDE "накрученная" на Microsoft C / C + + Compiler (cl.exe), поэтому корректным было бы сопоставление Delphi и Visual Studio или объектного Паскаля и C + +. Почему "си-плюс-плюс ", а не C? Да потому что C - процедурно-ориентированный язык "среднего уровня", а Object Pascal - высокоуровневый, с поддержкой ООП и абстракций, то есть это совершенно разные вещи.
Такая путаница в понятиях заставляет многих думать, что и C, и C + + - почти одно и то же, ведь это совсем разные языки. Что такое C + +? С этим вопросом лучше обратиться к его создателя - Бьерн Страуструп. Думаю, он бы ответил примерно так: С + + - это язык, который лучше, чем C поддерживает абстракцию данных, объектно-ориентированный (ООП) и обобщенное программирование. В том, что все это означает, мы и будем разбираться. Отмечу, что C + + разрабатывался с нуля с целью добавления новых средств к стандартному C.
В то же время, тяжелого и бедного уродца создатели делать не хотели, поэтому они руководствовались очевидными принципами: эстетика (все должно быть понято и элегантно), минимализм (поддержка какого-либо средства не должна вызывать дополнительных расходов в не использующих его программах) и т.п. Важное и само понятие поддержки стиля программирования. Можно говорить, что язык поддерживает такой стиль, когда использование этого стиля в нем удобно, просто и эффективно. При написании объектно-ориентированной программы на C (такое тоже возможно) непередаваемые ощущения заработанного геморроя обеспечены. Поэтому C лишь предоставляет возможность использовать стиль ООП, но не поддерживает его.
Рассмотрим непосредственно различную технику программирования и их реализации в С + +. Начнем, конечно, с процедурной, поскольку она является прародителем всех остальных. Основной принцип процедурного программирования гласит: "Реши какие понадобятся процедуры и используй наилучшие алгоритмы". Поддержка языка этой техники означает возможность передачи функции аргумента и возможности возвращения функциями значений. Залог успеха при написании программы - подобрать оптимальные алгоритмы обработки данных и, чтобы не запутаться в них, разбить код на процедуры и функции. Тут C + + очень похож на C. Те же инструкции ветвление и циклы, такое же объявление переменных (правда, возможно в любом месте программы), указателей и массивов, множество встроенных типов и т.д.
Хотя нововведений тоже немало: ссылки (&), операторы ввода-вывода (>> И <<), операторы для работы с памятью (new и delete), встроенный тип bool и т.д. Стоит упомянуть и обработку исключений. Вот пример функции, которая реализует вежливое, но настойчивое приглашение пользователю выйти. Модули и пространства имен. Процедурное программирование - основа основ, его стали применять в первых программах для первых ЭВМ. Но ничто не стоит на месте: сложность программ росла, и со временем важным вопросом стала организация данных.
Так появились модули - набор процедур вместе с данными, которые они обрабатывают. Стал актуален принцип сокрытия: "организуй код в модулях так, чтобы скрыть в них данные". На первый взгляд не совсем понятно, что и зачем нужно скрывать. Ответ прост: пользователю функций (хотя это такой же программист, как и их разработчик, назовем его так) не интересно, как они работают, для него главное, чтобы они действительно работали. Поэтому разработчик предоставляет пользователю такой интерфейс (пользовательский) - все, что необходимо для вызова данного набора функций (модуля). Реализация же этих функций не видна пользователю - она скрыта. По этому принципу построено большинство библиотек. Например, WINAPI, где код функций находится в системных dll, а программисты узнают о них из заглавных файлов windows.h.
Все объявленные переменные в хидерных файлах оставались по-прежнему глобальными, и к ним можно было легко обратиться из любого места программы. В С + + появилась такая полезная вещь, как пространство имен (namespaces). Объявляя пространство имен, ты, по сути, "ограничиваешь область видимости" всему, что находится внутри него. А внутри может находиться любое объявление. Абстракция данных. Используя модуль, описанный выше, ты в какой-то момент столкнешься с проблемой реализации несколько таких строк. Действительно, трудно представить ситуацию, где достаточно одного подобного строки. Результатом долгих и тяжелых экспериментов над нашим модулем-строкой станет некое подобие типа данных, "псевдо тип" строка. Как это чудо сделать - описывать не буду, потому что такое решение проблемы далеко от идеала. На этот случай C + + припас свое решение - возможность определения типов, которые ведут себя почти как встроенные.
Такие типы называются абстрактными или типами, определяемыми пользователем (пользовательскими). Образованные товарищи, знакомые с ООП, думаю, уже поняли, о чем язык. Используя модуль, описанный выше, ты в какой-то момент столкнешься с проблемой реализации несколько таких строк. Действительно, трудно представить ситуацию, где достаточно одного подобного строки. Результатом долгих и тяжелых экспериментов над нашим модулем-строкой станет некое подобие типа данных, "псевдо тип" строка. Как это чудо сделать - описывать не буду, потому что такое решение проблемы далеко от идеала. На этот случай C + + припас свое решение - возможность определения типов, которые ведут себя почти как встроенные. Такие типы называются абстрактными или типами, определяемыми пользователем (пользовательскими). Образованные товарищи, знакомые с ООП, думаю, уже поняли, о чем речь.
Кроме классов, шаблоны можно предоставлять и функции, что тоже очень удобно. Это позволяет писать универсальные функции сортировки, поиска и замены элементов контейнеров-шаблонов. Шаблоны широко используются в стандартной библиотеке C + + - в STL (Standart Template Library). STL предоставляет пользователям всяких контейнеров (от строк к очередям с двумя концами), потоков ввода-вывода, универсальных алгоритмов и многое другое. Кроме того, она включает всю стандартную библиотеку C. Вывод - must use. Пользоваться ей настоятельно рекомендую еще и потому, что писали ее не один год, постоянно улучшая и модернизируя.
Детально изучайте рекомендации по использованию библиотеки MFC и правила взаимодействия с базами данных.