Лекция 1

История C++

Основные вехи развития:
  1. 1972 — создание языка С (Брайан Керниган, Деннис Ритчи)
  2. 1980 — создание языка С++ (Бьярн Страуструп)
  3. 2003 — принят первый стандарт языка C++
  4. 2011 — принят второй стандарт языка C++
Философия С++

Простейшая программа

Каждая программа на C++ состоит из одной или более функций. Среди них обязательно должна присутствовать главная функция main, которую и вызывает операционная система при запуске программы. Простейший пример:

int main() {
    return 0;
}

Значение, возвращаемое main, используется ОС для определения успешности завершения программы. Если не ноль, то в программе произошла ошибка.

#include <iostream>   // Заголовочный файл

int main() {
    std::cout << "Hello world!" << std::endl;
}

Пространства имен

Чтобы каждый раз не писать префикс std::, можно включить пространство имён в глобальную область видимости:

using namespace std; // Всё содержимое пространства std 
                     // становится видимым во всем файле.

using std::cout;     // Либо только элемент cout становится
                     // видимым во всем файле.

int main() {
    cout << "Hello world!";
}

Типы данных

С++ Pascal
int integer
bool boolean
double, float real
char char

Замечание: в типе char не поддерживается Unicode по умолчанию.

Способы инициализации переменных

double d = 3.14;    // старый стиль

double d {3.14};    // новый стиль
double d = {3.14};  // или так

Неявное преобразование типов

В C++ при попытке присвоить целочисленной переменной значение с плавающей точкой, произойдёт отбрасывание дробной части. При инициализации в новом стиле будет ошибка компиляции.

int i = 3.14;   // i == 3
int i {3.14};   // Ошибка компиляции

Тип char занимает 1 байт, поэтому диапазон его значений [-128,127], однако следующий код будет откомпилирован.

char c = 128;   // c == -128

Основные операции

C++ Pascal Примеры
= := int a = 4;
/ div 7 / 3 — тип int; 7 / 3.0double
% mod
a++ / ++a a = a + 1 ...
&& and i > 0 && i != 2
\ \
! not
== =
!= <>
<< shl (8 << 1 = 16)
>> shr
& and 7 & 3 == 3
\ or
^ xor
~ not

Возможна запись a = b = c, означающая b = c; a = c — множественное присваивание (справа налево).

Особое внимание стоит обратить на операцию сравнение на равенство:

if (a = 5)    // (1) Неверно! Но легко пропустить
if (5 = a)    // (2) Неверно! И компилятор выдаст ошибку

if (a == 5)  // (3) Верно! Но если спутать с (1), то легко не заметить
if (5 == a)  // (4) Верно! И если спутать с (2), то легко увидеть: ошибка компиляции

Условный оператор

if (условие) {
    ...
} else {
    ...
}

Допускается сокращённая форма (без else).

Тернарная условная операция

bool flag;
if (flag) {
    cout << "true";
} else {
    cout << "false";
}

Более короткая запись:

cout << (flag ? "true" : "false");

Оператор выбора

switch (i) {
    case 1:
        ...
        break;
    case 2:
    case 3:     
    ...
    default:
}

Операторы цикла

Цикл while

while (x > 10) {
    x -= 1;
}

Цикл do-while

do {
   x--;
} while (x > 0);

Похож на repeat/until в Паскале, но используется условие продолжения цикла (как в while), а не условие окончания как в repeat/until.

Цикл for

for (инициализация; условие_продолжения; действие_на_каждом_шаге) {
    ...
}

for (int i = 0; i < 10; i++) {
    cout << i << " ";
}                               // "0 1 2 3 4 5 6 7 8 9 "

for (;;);  // бесконечный цикл

Оператор , (запятая)

Возвращает значение своего последнего операнда, например:

int s = 0, i = 6;
cout <<  s = i*i, i;  // Выведет 6
  1. На главную