Доброго дня усім. Сьогодні ми спробуєм розглянути мінімальний базис знань, необхідних для написання програм на С++. І найперше, що Я хотів вам розказати, це куди писати чи вставляти свій новий код. Свій новий код необхідно вставляти в головну функцію програми - "main". Тобто:
int main(int argc, char** argv)
{

     //вставляємо свій код сюди

     return 0 ;
}
Тобто вам необхідно запустити своє улюблене середовище розробки, створити новий проект (бажано вибрати "консольна програма") і, якщо середовище само згенерувало дану функцію, друкувати код між двома фігурними дужками (як показано у прикладі вище), а якщо середовище не генерую дану функцію - скопіювати чи набрати її самостійно. З концепцією функцій ми познайомися пізніше в даній статті.

Типи даних

У С++ є декілька вбудованих типів даних, без яких ми собі не уявляємо наше повсякденне життя. До них відносять:
  • char - символьний тип (зберігає один символ);
  • bool - булевий тип (зберігає значення "true" і "false")
  • short - ціле число (зберігає одну цілу цифру з малою потужністю типу)
  • int - ціле число (зберігає одну цілу цифру)
  • float - дійсне число (зберігає одне число з плаваючою крапкою)
  • double - дійсне число з подвійною точністю (те саме що і float, але більша потужність типу).
Дані типи сортовані по зростанню використання пам'яті. Наприклад (на моїй 32-х розрядній системі), char займає тільки один байт і максимальна кількість значень, які можна записати в змінну даного типу складає 28=256 значень, а для типу int - 4 байти, що займає 232=4294967296 значень. Щоб перевірити, скільки пам'яті використовує кожен тип можна скористатися наступною програмою:
#include <iostream>
using namespace std ;

int main (int argc, char** argv)
{
    cout << "тип char займає " << sizeof (char) << " байти\n" ;
    cout << "тип short займає " << sizeof (short) << " байти\n" ;
    cout << "тип int займає " << sizeof (int) << " байти\n" ;
    cout << "тип float займає " << sizeof (float) << " байти\n" ;
    cout << "тип double займає " << sizeof (double) << " байти\n" ;
    
    return 0 ;
}
Для моєї системи, після компілювання і виконання даної програми, вивід у термінал буде наступним: type_check_cxx_execute Щоб оголосити змінну будь-якого типу необхідно скористатися наступним синтаксисом: <необхідний_тип> <назва_змінної>; Наприклад, наступна програма оголошує змінну цілого числа (int), числа з плаваючою крапкою (double) і масива символів (char) розміром 256 значень.
int main (int argc, char** argv) //головна функція програми
{
    int a ; //ціле число
    double b ; //число з мантисою
    char message[256] ; //масив символів
    
    return 0 ; //виходимо з програми
}
У C++ є ще декілька ключових слів для модифікування типів (unsigned, volatile, long), але Вам необхідно спочатку вивчити базові типи і загальний синтаксис С++.

Оператори вибору

У С++ є три типи операторів: if-оператор; switch-оператор; і оператор "?:;". Оператор вибірки має наступний синтаксис:
if ( /* умова*/ )
{
    // команди, якщо справджується умова
}
else
{
    // команди, якщо умова не справджується
}
Наприклад, розглянемо наступну програму:
#include  //вивід на екран
#include  //для типу string
using namespace std; //використовуємо простір імен
 
int main (int argc, char** argv) //головна функція програми
{
    std::string uname ; //оголошуємо рядкову змінну
    
    std::cout << "Введіть своє ім'я: " ; //виводимо повідомлення на екран
    
    cin >> uname ; //зчитуємо ім'я користувача
    
    if (uname=="Юрій") //оператор і умова
    {
        cout << "Привіт, Юрій\n" ;
    }
    else
    {
        cout << "Привіт, незнайомець\n" ;
    }
    
    return 0 ; //виходимо з програми
}
Після компілювання і виконання наступної програми в консолі, ми побачимо наступне: if_operator_example Оператор switch призначений для множинної вибірки значень. Його синтаксис наступний:
switch (/* змінна*/)
{
    case /* можливе_значеня-1 */ :
        /* Ваші команди для даного значення */ ;
        break ;
        
    case /* можливе_значеня-2 */ :
        /* Ваші команди для даного значення */ ;
        break ;
        
    /* ... */
    
    default :
        /* Ваші команди для значення, яке ви не врахували */ ;
}
Наприклад, розглянемо програму, яка зчитує номер місяця і виводить на екран його назву:
#include <iostream> //для виводу на екран
#include <string> //тип string
using namespace std; //використовуємо простір імен

int main (int argc, char** argv) //головна функція програми
{
    int month = 0 ; //цілочисельна змінна 

    std::cout << "Введіть номер місяця: " ; //виводимо на екран повідомлення
    
    cin >> month ; //зчитуємо номер місяця

    switch (month) //оператор вибірки
    {
        case 1: //для першого місяця
            cout << "Січень\n" ; //виводимо повідомлення
            break ; //вихід з оператора
        case 2:
            cout << "Лютий\n" ;
            break ;
        case 3:
            cout << "Березень\n" ;
            break ;
        case 4:
            cout << "Квітень\n" ;
            break ;
        case 5:
            cout << "Травень\n" ;
            break ;
        case 6:
            cout << "Червень\n" ;
            break ;
        case 7:
            cout << "Липень\n" ;
            break ;
        case 8:
            cout << "Серпень\n" ;
            break ;
        case 9:
            cout << "Вересень\n" ;
            break ;
        case 10:
            cout << "Жовтень\n" ;
            break ;
        case 11:
            cout << "Листопад\n" ;
            break ;
        case 12:
            cout << "Грудень\n" ;
            break ;

        default :
            cout << "Такого місяця немає!\n" ;
    }

    return 0;
}
Після компілювання і виконання у терміналі даної програми ми отримаємо наступне: switch-operator Оператор "?:" в основному корисний через свою можливість повертати значення на відміну від оператора if. Його синтаксис наступний:
/* умова */ ? /* команди1 */ : /* команди2 */ ;
Якщо умова справджується, виконуються команди з блоку "команди1", а якщо умова не справджується - воконуються операції з блоку "команди2". Наприклад розглянемо наступну програму:
int main(int argc, char** argv)
{
    bool a ; //оголошуємо булеву змінну 

    a = 2<1 ? true : false ; //обчислення оператором вибірки
    
    return 0; //виходимо з програми
}
Очевидно, що у програмі в змінну а запишеться false, оскільки 1 завжди менше від 2, тобто умова не справджується і оператор повертає значення з свого другого блоку.

Цикли

Є три типи циклів: цикл з передумовою (while), цикл з післяумовою (do while) і цикл з визначеною кількістю ітерацій (цикл for). Для циклу з передумовою синтаксис буде наступним:
while (/* умова */)
{
    // команди для повторення
}
Наприклад, розглянемо програму, яка виводить числа від 1 до 10 у вікно консолі:
#include <iostream> //для виводу повідомлень
using namespace std; //використовуємо простір імен

int main(int argc, char** argv) //головна функція програми
{
    int i = 1 ; //цілочисельна змінна
    
    while (i<=10) //цикл і умова
    {
        cout << i++ << " " ; //виводимо на екран
    }
    
    return 0 ; //виходимо з програми
}
Вивід буде наступним: while Перевага циклу з післяумовою полягає у тому, що його дії виконаються хоча б один раз. Його синтаксис наступний:
do
{
    // дії для повторення
} while (/* умова */) ;
Розглянемо наступну програму:
#include <iostream> //для виводу на екран
#include <string> //для типу string
using namespace std; //використовуємо простір імен

int main ()
{
    string command ; //змінна типу string
    
    do //початок циклу
    {
        cout << "enter command: " ; //виводимо запрошення на ввід команди
        cin >> command ; //зчитуємо команду в буфер

        //ось тут обробка Ваших команд операторами вибірки
    } 
    while (command!="exit" && command!="quit") ; //цикл і умова
    
    return 0 ; //виходимо з програми
}
При її виконанні в командному інтерпретаторі, ми отримаємо наступне: do_while Синтаксис третього типу виглядає наступним чином:
for (<попередні умови і оголошення>; <умова циклу>; <дія на кожній ітерації>)
{
    /* команди на виконання */
}
Приклад використання циклу:
#include  //для виводу на екран
#include  //для типу string
using namespace std; //використовуємо простір імен

int main (int argc, char** argv) //головна функція програми
{
    string str = "world wide" ; //оголошуємо змінну і записуємо в неї слова
    int cnt = 0; //оголошуємо обрахункову змінну
    
    for (int i=0; i<str.size(); ++i) //початок циклу
    {
        if (str[i]=='w') //перевіряємо рівність значевння букві 'w'
        {
            ++cnt; //обраховуємо скільки разів зустрічається буква 'w' у словах
        }
    }
    
    //виводимо результат на екран
    cout << "Буква '" << "w" << "' зустрічається у слові '"  
         << str << "' " << cnt << " раз\n" ; 
    
    return 0 ; //вихід з програми
}
Після виконання програми на екрані ми побачимо наступне: for

Додаткові можливсті мови

До додаткових можливостей мови можна віднести перш за все функції. Функції використовуються коли у програмі часто зустрічається певний код, який, для лаконічності, можна віднести у окремі підпрограму - функцію. Синтаксис функції:
/* тип_повернення */ /* назва_функції */ (/* параметри_функції_через_кому*/)
{
    //код функції...

    return /* тип_повернення */ ;
}
Розглянемо наступний приклад використання функції
#include <iostream> //для виводу на екран
#include <string> //для типу string
using namespace std; //використовуємо простір імен

void print_to_screen (double a) // оголошуємо функцію виведення на екран
{
    cout << "Моє число = " << a << endl ; // виводимо повідомлення
    
    return ; //повертаємо ніщо (void - пустий тип)
}

int main (int argc, char** argv) //головна функція програми
{       
    double z = 230.5 ; // оголошуємо змінну і зберігаємо у неї значення
    
    print_to_screen (z) ; //викликаємо функцію 
    
    z = 5.5 ; //Змінюємо значення змінної z
    
    print_to_screen (z) ; //викликаємо функцію 
    
    return 0 ; //вихід з програми
}
При виконанні програми ми отримаємо: function Іншою корисною якістю С++ являються класи. Класи - це основа парадигми об'єктно-орієнтованого програмування (ООП). Вони являються зручним способом організації коду, особливо для великих програм. Тільки завдяки класам, Ви можете програмувати на рівні коду "world.create()", або ж робити асемблерні вставки за допомогою оператора __asm__, завдяки успадкуванні якостей мови С. Основний синтаксис оголошення класу у С++ наступний:
class /* назва_класу */
{

    public:
    
        //загальнодоступні функції (ментоди) і поля (змінні)
    
    private:
        
        // недоступні поза межами класу поля і методи

} ;
Розглянемо приклад використання класу:
#include <iostream>
using namespace std;

class Human
{

    public:
    
        int age() { return years ; }
        void set_age( int a) { years = a ; }
    
        Human () { years = 0 ; }
        
    private:
        
        int years ; 
} ;

int main (int argc, char** argv) 
{

    Human Andriy;
    
    Andriy.set_age(45) ; 
    
    cout << "Вік Андрія складає " << Andriy.age() << endl ;
    
    return 0 ;
}
Після виконання програми, ми можемо побачити наступне: class_use Самі класи С++ мають ще безліч корисних функцій, на подобі дочірніх класів, віртуальних функцій і класів, і багато чого іншого. Окрім звичайних класів, С++ також має шаблонні функції і шаблонні класи, але все це виходить за межі даної статті. В даній статті Ви познайомилися з основними частинами мови для написання найпростіших програм. Якщо Ви бажаєте глибше розуміти синтаксис і симантику мови, Вам необхідно прочитати не одну книгу і статтю, особливо книги її творця - Б'ярна Страуструпа.