|
|
|||||||||||||||||||||||||||||
|
C++ для PHP разработчиков (исходники)Источник: habrahabr kossnocorp
Не удивлюсь, что имя Бьёрн Страуструп скажет мало нынешнему поколению веб, а в частности PHP-программистам. Так вышло что, безумно популярный, практически идентичный по синтаксису PHP, написанный на C, дает мало представления о программирование на C/C++. История C++ началась очень давно. Если зрить в корень, в язык программирования C, то в новом году будет вот уже 40 лет с момента начала разработки сотрудниками "Bell Labs" Кеном Томпсоном и Денисом Ритчи великого языка. C - лаконичный, имеющий на тот момент современный набор конструкций управления потоком выполнения, структур данных и обширный набор операций. История продолжилась в середине 80х годов прошлого века. Сотрудник фирмы "Bell Laboratories" Бьёрн Страуструп дал жизнь новому витку эволюции популярнейшего и мощного языка C. "C с классами".
Для чего?Для того что бы показать откуда растут ноги у PHP а заодно и C++ приведу пример кода на C: #include <stdio.h> int main(void) return(0); Типичное консольное приложение. Вначале подключаем заголовок с описанием функций ввода вывода stdio.h (standart input/output). После во входной точке приложение (тут наверное стоит провести аналогию с index.php, в C это функция main) Немногим будет отличаться хеллоу ворлд и на С++. #include <iostream> int main(void) return(0); Новая библиотека ввода вывода и вывод на экран оператором сдвига влево. Стоит отметить и что оба примера отлично будут работать в C++. Не буду заострять внимания на различиях C и C++, стоит лишь оговориться, что обратная соместимость C с C++ предусмотриться, но ввиду некотрых нюансов не гарантируется. Но статья не об этом.
Типы данныхГлавное что меня удивило и насторожило в PHP, когда я сменил профиль дейтельности на веб, то, что отсутствуют определения типа перменной. Если кто знаком с VB жаргоном, все переменные в PHP - variant. Т.е не требуют явного указания типа и можно без лишних телодвижений сложить int и string. String? Нет такого типа в C++! Но есть замечательная библиотека STL (стандартная библиотека шаблонов), которая предоставляет нам функционал позволяющий жанглировать строками. По другому только char *string = new char[64] (ну или другая длинная строки). Сложно? Да не стоит об этом думать когда есть STL! Эта библиотека достойна дополнительной статьи, если интерес будет, будет и статья. Ладно хвататит уже лирики. Обещал же. Типы данных C++: int - целое значение. Объявление переменной происходит так: int foo; float bar = 3.14; Приведение одного типа к другому: foo = (int)bar; Кому то покажется это все лишними телодвижениями, но поверьте гораздно проще определить источник проблемы, когда компилятор ругается на приведение несхожих типов друг к другу.
Указатели и ссылкиВсе данные как известно хранятся в памяти. Не секрет? Не секрет. Что бы получить адрес перменной делаем так: &foo Зачем? А что бы сохранить его: int *bar = &foo А для чего все таки? Ну например адрес можно передать в функцию а потом там изменить значение перменной: functPp(&bar); int functPp(int *var) Можно и проще. Воспользуемся ссылкой: functPp(bar); int functPp(int &var) Указатели одна из тех возможностей которых мне не хватало в самом начале работы c PHP. Потом я совсем и забыл для чего нужны эти самые указатели :) Можно например передать указатель на класс который наследован от classParent в массив указателей родительского класса. А потом в цикле вызывать абстрактный член класса. Например action или render. Для чего, вы поймете если предствите невероятное кол-во объектов в игре у которых свои action и render, а обработать их в одном цикле ой как нужно. Это на примере игры. Думаю каждый из вас найдет указателям в воображение свое применение.
Классыclass classSample int privateValue1; public: string name; classSample(void) // Стандартный конструктор classSample(string _name, string _lastname) // Конструктор с передачей параметров bool action() Как вы уже наверняка заметили, все очень знакомо и близко. Пугает лишь два конструктора? А меня не пугает. Меня пугает отсутствие подобных фич что в PHP что в модных альтернативах Python и Ruby. А как было бы удобно. Это свойство называется полифоризм, или попросту перегрузкой функций. Перегружать в C++ можно практически все виды операторов, от математических функций и функций сравнения до приведения к определенным типам данных. Это позволяет нам очень круто оперироват нашими классами, фактически создавая новые типы данных. В PHP к сожалению (а может к счастью? кто знает) этого нет. А мне так хочется порою… Это первая часть планируемой ретроспективы в мою память с последующим окунанием в программирование графики. Или попросту игр. Приятного вечера. Я пошел работать. Без перегрузок, без указателей и без компиляции… Продожение следует… Ссылки по теме
|
|