C + + для PHP розробників (исходники), Різне, Програмування, статті

Не здивуюся, що ім’я Бьерн Страуструп скаже мало нинішньому поколінню веб, а зокрема 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 (“Привіт Хабрахабр!
“);

  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 на жаль (а може на щастя? Хто знає) цього немає. А мені так хочеться інколи …

Це перша частина планованої ретроспективи в мою пам’ять з подальшим зануренням в програмування графіки. Або попросту ігор. Приємного вечора. Я пішов працювати. Без перевантажень, без покажчиків і без компіляції …

Продоженіе слід …

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*