- Брайан Керниган.
Среди людей, которые начинают свое знакомство с языками программирования, безусловно, больше всего тех, кто отдал предпочтение Паскалю. И это не случайно. Придуманный Н.Виртом для обучения студентов, в последнее время он стал (в основном благодаря среде Delphi) мощным средством, которому по плечу любые задачи. В отличие от Паскаля, C++ изначально был универсальным языком программирования, задуманным так, чтобы сделать программирование более приятным для серьезного программиста. Однако это ни в коем случае не означает, что C++ сложен и непонятен, просто, в зависимости от уровня Ваших знаний, Вы можете использовать или не использовать все его возможности..
Данная статья ставит себе за цель не только помочь начинающим программистам на C++, но и привлечь внимание заядлых "паскальщиков" (между прочем, профессиональные С++ программисты пользуются гораздо большим спросом, да и оплачиваются выше, чем программисты на Паскале). Исходя из этого, я решил дать некоторые советы по безболезненному переходу с Паскаля на С++ (если быть более точным, то с Delphi на C++Builder :-)).
Язык программирования С++, не смотря на попытки со стороны Паскаля, был и остается лучшим языком для написания качественных, надежных в работе и простых в понимании программ. Поэтому, если Вы считаете, что программирование должно стать основой Вашей профессиональной деятельности - то рано или поздно знания по С++ Вам обязательно понадобятся. Для изучения языка С++ и сред С++Builder и Visual C++ я рекомендую Вам посмотреть хорошую подборку статей и учебников, которые находятся на странице программист на сайте abyss-group.
Если Вы давно программируете на Паскале, то у Вас, наверняка, накопилось немало программ, которые, безусловно, не только нужные и полезные, но и архиважные :-). Поэтому терять их Вы не захотите, да и ребята из Inprise сделали все, чтобы этого не произошло.
Хочу обрадовать тех, кто программирует в Delphi - во-первых интерфейс у С++Builder и Delphi абсолютно одинаков и Вам не понадобиться заново разбираться во всех опциях и настройках, а во-вторых компилятор С++Builder свободно понимает компоненты, формы, константы и простые функции, написанные на Объектном Паскале. В любом другом случае Вам следует остерегаться подводных камней при переводе вашего кода.
Сразу предупреждаю, что в С++ различаются заглавные и строчные буквы (это не относится к директивам препроцессору), поэтому осторожно обращайтесь с клавишей Shift. Заведите себе привычку первую букву каждого отдельного слова, которое не является ключевым словом С++, писать с большой буквы (например StrToInt) и у Вас c этим не будет проблем.
В языке С++ нет процедур, неким аналогом которых может служить разве что функция типа void, не возвращающая результат, поэтому следует во всех случаях после имени функции писать символы () (например getch()). Также в С++ не допускается вложение функций и вложения описания класса в функцию.
Оператор членства, который используется для доступа к функции, свойству или полю класса, в Паскале обозначается символом "точка" - ".". В отличие от Паскаля, в С++ для объектов VCL используется символ косвенного членства "смартпоинт" - "->" (это связано со способом размещения объектов в памяти). Поэтому код Паскаля Edit1.Text на С++ будет выглядеть Edit1->Text.
Оператор присваивания в С++ - знак равенства "=", поэтому изменен символ оператора логического тождества - это удвоенный знак равенства - "==". Для оператора "логическое неравно" в С++ предназначен символ "!=". Также в С++ отсутствуют ключевые слова Паскаля and и or, вместо них существуют символы "&" и "||". Таким образом код Паскаля if (a<>b) or (b=c) должен записываться на С++ как if((a!=b) || (b==c)).
Одиночные кавычки "'" используются в С++ не для обозначения текстовых строк, как в Паскале, а для обозначения только отдельных символов типа char (этот тип в С++ может быть или signed char (от -127 до +128), который аналогичен просто char, или unsigned char (от 0 до +255), что соответствует типу char в Паскале). Для обозначения строк в С++ служат двойные кавычки """. Для полной совместимости со строками в Delphi, я рекомендую пользоваться только типом String.
Ключевое слово Паскаля with на С++ не имеет эквивалента, поэтому Вам придется добавлять
имя класса ко всем переменным, свойствам и функциям. Опять же не имеет эквивалента и ключевое
слово Паскаля as, поэтому переводя программу на С++ следует использовать оператор
динамического преобразования типа dynamic_cast или функцию преобразования типа
("новый тип")("переменная старого типа"). Таким образом фрагмент кода на
Паскале (Sender as TButton).Caption:='Hi' на С++ будет выглядеть либо как
TButton* button = dynamic_cast
Язык С++ вообще не поддерживает такое определение как тип множество, вместо них программисты используют битовые поля, которые хотя и сложней в обращении, но более эффективны в работе. Однако из-за того, что этот тип очень часто используется в VCL, в С++Builder был введен шаблонный класс Set, который реализует все способности Паскалевского типа множество. Для него определены следующие операции: включение элемента в множество - "<<", удаление элемента - ">>" и очищение множества - Clear.
Еще одна ловушка при переводе программы с Паскаля на С++ подстерегает Вас при использовании оператора switch - аналога оператора case в Паскале. Дело в том, что в отличие от своего собрата, оператор switch не прекращает свою работу при выполнении одного из условий, а продолжает работать пока не пройдет все операции до конца, начиная с первого удовлетворенного условия. Чтобы этого не случилось, необходимо после каждого условия дописывать оператор break. Поэтому код Паскаля:
На С++ должен выглядеть следующим образом:
Однако есть трудности и совершенно другого свойства, которые тоже поджидают Вас при переходе с Паскаля на С++. Речь идет о тех случаях, когда написание программы на С++ требует от вас средств, которых и в помине нет в Паскале (например использование команд препроцессору), особенно много проблем такого рода возникает в объектно-ориентированном программировании. Но пусть это будет темой для моей отдельной статьи.
Ну, вот на первый раз и все. Надеюсь, что своими советами не отбил еще у Вас желание изучить этот язык программирования :-). Если Вас заинтересовала тема, затронутая в этой статье, то у нас впереди будет еще много встреч , которые будут интересны всем, кто хотел бы лучше изучить С++. По всем вопросам и предложениям пишите: abyss-group@narod.ru, я постараюсь ответить на все письма.