(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

C++ для PHP разработчиков (исходники)

Источник: habrahabr
kossnocorp

Не удивлюсь, что имя Бьёрн Страуструп скажет мало нынешнему поколению веб, а в частности PHP-программистам. Так вышло что, безумно популярный, практически идентичный по синтаксису PHP, написанный на C, дает мало представления о программирование на C/C++.

История C++ началась очень давно. Если зрить в корень, в язык программирования C, то в новом году будет вот уже 40 лет с момента начала разработки сотрудниками "Bell Labs" Кеном Томпсоном и Денисом Ритчи великого языка. C - лаконичный, имеющий на тот момент современный набор конструкций управления потоком выполнения, структур данных и обширный набор операций. История продолжилась в середине 80х годов прошлого века. Сотрудник фирмы "Bell Laboratories" Бьёрн Страуструп дал жизнь новому витку эволюции популярнейшего и мощного языка C. "C с классами".

"C с классами" получил свое имя в 1983. C++ в 90х годах стал одним из самых широко применяемых языков программирования, благодаря мощи предка и объектно ориентированному подходу который дал на мой взгялд безкрайние возможности, придя на смену (опять же только по моему мнению) узконапрявленным языкам программирования фроде Fortran. Конечно тут стоит оговориться что во многом это заслуга именно C, с которым C++ в итоге пошли раными дорогами.

Для чего?

Для того что бы показать откуда растут ноги у PHP а заодно и C++ приведу пример кода на C:

#include <stdio.h>

int main(void)
{
  printf("Привет Хабрахабр!\n");

  return(0);
}

Типичное консольное приложение. Вначале подключаем заголовок с описанием функций ввода вывода stdio.h (standart input/output). После во входной точке приложение (тут наверное стоит провести аналогию с index.php, в C это функция main)

Немногим будет отличаться хеллоу ворлд и на С++.

#include <iostream>

int main(void)
{
 cout << "Привет Хабрахабр!";

 return(0);
}

Новая библиотека ввода вывода и вывод на экран оператором сдвига влево. Стоит отметить и что оба примера отлично будут работать в C++.

Не буду заострять внимания на различиях C и C++, стоит лишь оговориться, что обратная соместимость C с C++ предусмотриться, но ввиду некотрых нюансов не гарантируется. Но статья не об этом.

Типы данных

Главное что меня удивило и насторожило в PHP, когда я сменил профиль дейтельности на веб, то, что отсутствуют определения типа перменной. Если кто знаком с VB жаргоном, все переменные в PHP - variant. Т.е не требуют явного указания типа и можно без лишних телодвижений сложить int и string.

String? Нет такого типа в C++! Но есть замечательная библиотека STL (стандартная библиотека шаблонов), которая предоставляет нам функционал позволяющий жанглировать строками. По другому только char *string = new char[64] (ну или другая длинная строки). Сложно? Да не стоит об этом думать когда есть STL! Эта библиотека достойна дополнительной статьи, если интерес будет, будет и статья.

Ладно хвататит уже лирики. Обещал же.

Типы данных C++:

int - целое значение.
bool - булево, true или false
char - символ
float - число с плавающей точкой.; например 3.14
double - длинное целое значение

Объявление переменной происходит так:

int foo;

float bar = 3.14;

Приведение одного типа к другому:

foo = (int)bar;

Кому то покажется это все лишними телодвижениями, но поверьте гораздно проще определить источник проблемы, когда компилятор ругается на приведение несхожих типов друг к другу.

Указатели и ссылки

Все данные как известно хранятся в памяти. Не секрет? Не секрет.

Что бы получить адрес перменной делаем так:

&foo

Зачем? А что бы сохранить его:

int *bar = &foo

А для чего все таки? Ну например адрес можно передать в функцию а потом там изменить значение перменной:

functPp(&bar);

int functPp(int *var)
{
 *var++; // Тут используется оператор разименования, т.е обращение непосредственно к перменной
}

Можно и проще. Воспользуемся ссылкой:

functPp(bar);

int functPp(int &var)
{
 var++; // А тут ничего разименовывать нет нужды
}

Указатели одна из тех возможностей которых мне не хватало в самом начале работы c PHP. Потом я совсем и забыл для чего нужны эти самые указатели :)

Можно например передать указатель на класс который наследован от classParent в массив указателей родительского класса. А потом в цикле вызывать абстрактный член класса. Например action или render. Для чего, вы поймете если предствите невероятное кол-во объектов в игре у которых свои action и render, а обработать их в одном цикле ой как нужно. Это на примере игры. Думаю каждый из вас найдет указателям в воображение свое применение.

Классы

class classSample
{
private:

int privateValue1;
int privateValue2 = 1998;

public:

string name;
string lastname;

   classSample(void) // Стандартный конструктор
  {
    name = "Хабра";
    lastname = "Хабр";
  }

   classSample(string _name, string _lastname) // Конструктор с передачей параметров
  {
    name = _name;
    lastname = _lastname;
  }

  bool action()
  {
     privateValue1 = privateValue2 = 2009;
  }
}

Как вы уже наверняка заметили, все очень знакомо и близко. Пугает лишь два конструктора? А меня не пугает. Меня пугает отсутствие подобных фич что в PHP что в модных альтернативах Python и Ruby. А как было бы удобно. Это свойство называется полифоризм, или попросту перегрузкой функций. Перегружать в C++ можно практически все виды операторов, от математических функций и функций сравнения до приведения к определенным типам данных. Это позволяет нам очень круто оперироват нашими классами, фактически создавая новые типы данных. В PHP к сожалению (а может к счастью? кто знает) этого нет. А мне так хочется порою…

Это первая часть планируемой ретроспективы в мою память с последующим окунанием в программирование графики. Или попросту игр. Приятного вечера. Я пошел работать. Без перегрузок, без указателей и без компиляции…

Продожение следует…

Ссылки по теме


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Дискуссии и обсуждения общего плана »
Написать редактору 
 Рекомендовать » Дата публикации: 27.02.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
SmartBear AQtime Pro - Node-Locked License (Includes 1 Year Maintenance)
ReSharper Ultimate - Commercial annual subscription
Oracle Database Standard Edition 2 Named User Plus License
The BAT! Professional - 1 компьютер
erwin Data Modeler Standard Edition r9.7 - Product plus 1 Year Enterprise Maintenance Commercial
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
СУБД Oracle "с нуля"
Работа в Windows и новости компании Microsoft
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Кухня (4)
Хочу сделать ремонт на кухне. Где приобрести кухонную плиту? Какой фирмы стоит её рассматривать?
 
Как в IBM Rational DOORS сделать заголовки не жирным шрифтом? (2)
Измучился уже, когда идет иерархия уровнем ниже, чем Х.Х., мне нужно, чтобы заголовки не...
 
Ищу программиста для написания программы (62)
Ищу программиста ,владеющего Вижуал Бэйсик и программированием в Экселе, для написания...
 
Отличается ли ДрифтКазино от беттинга? (18)
Друзья, давно заметил, что на Дрифте уже несколько месяцев во всю рекламируется и предлагается...
 
Написание любых программ на заказ (19)
Напишу любую программу на заказ
 
 
 



    
rambler's top100 Rambler's Top100