Глиф Учебники

Чем C++ отличается от C

Справочник · C++ · 2 минуты чтения

Коротко: почти всё, что есть в C, есть и в C++ — те же типы, if, циклы, функции, указатели, printf и scanf. Сверху C++ добавил классы, ссылки, перегрузку, шаблоны и большую стандартную библиотеку: строки string, массивы vector, готовые сортировки, множества и словари.

C++ вырос из C: его автор Бьёрн Страуструп начал в 1979 году с языка «C с классами», а имя C++ появилось в 1983 году. Сейчас это два разных языка со своими стандартами.

Что есть в C++ и нет в C

ВозможностьCC++
Классы, конструкторы, public/privateнетесть
Ссылки int&нет, только указателиесть
Перегрузка функций (одно имя — разные параметры)нетесть
Шаблоны (template)нетесть
Пространства имён (namespace, std::)нетесть
Исключения (try, catch)нетесть
Строкимассив char и функции <string.h>класс string
Динамические массивыmalloc и freevector, new и delete
Сортировка, множества, словариqsort, остальное — самомуSTL: sort, set, map
Ввод-выводprintf, scanfcout, cin (и printf тоже)

Шаблоны — функции и классы, написанные один раз для любого типа данных (так устроен vector<int>, vector<string>). Исключения — способ сообщить об ошибке и обработать её в другом месте программы. Пространство имён — общая приставка для имён одной библиотеки: у стандартной это std::. STL — стандартная библиотека шаблонов C++.

Одна и та же задача — прочитать числа и вывести их по возрастанию — на C++ решается в несколько строк:

C++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> a(n);
    for (int& x : a) {
        cin >> x;
    }
    sort(a.begin(), a.end());
    for (int x : a) {
        cout << x << " ";
    }
    cout << "\n";
    return 0;
}
Ввод
4
3 1 4 2
Вывод
1 2 3 4

На C понадобятся malloc для массива нужной длины, своя функция сравнения для qsort и free в конце.

Где код на C не собирается как C++

Большая часть программ на C собирается и компилятором C++, но не все:

Что учить первым

Знать C перед C++ не обязательно: курс C++ начинается с нуля. Для олимпиад и большинства прикладных задач удобнее C++ — со стандартной библиотекой многое уже готово. Язык C стоит выбрать, если цель — микроконтроллеры, ядро операционной системы или код, который должен собираться самыми простыми компиляторами. Прошлые знания при этом не пропадут: синтаксис у языков общий, и переход в любую сторону даётся легко.

Сам язык C — в теме C. Микроконтроллеры Arduino программируют на языке, основанном на C++, — тема Arduino.