В этой статье мы рассмотрим простое и понятное введение в С++. Хотя C++ кажется сложным, но это происходит потому, что при его описании используют много туманных абстракций и лишних терминов.
Мы же рассмотрим C++ без всякой философии, с точки зрения программиста-практика.
1. Сравнение С и С++
Начнем с хорошей новости. Язык C++ — это клон языка C, в который были добавлены средства работы с классами. Поэтому, если вы знаете язык C, то вы уже на 90% знаете C++. Первоначально C++ так и назывался «Си с классами», но потом решили дать более «си-шное» название, то есть добавили единичку к C. Поэтому нам нужно разобраться только с программированием в классах. Что мы сейчас и сделаем.
2. Создание нового проекта
Запустите CodeBlocks, создайте новый проект и выберите шаблон «Console application».
Нажмите «Перейти».
Выберите C++ и нажмите Next.
Укажите папку и имя файла и нажмите Next.
Нажмите Finish. Вы получили минимальную программу на C++.
Нажмите F9 для компиляции и запуска программы.
Все работает.
3. Пример на С
Так как C++ — это клон C, то мы можем писать код, как обычно мы это делаем в языке C. Сделаем это, чтобы потом сравнить отличия. Напишем следующую программу:
# include <iostream>
using namespace std;
int Sum(int x, int y)
{
return x + y;
}
int main()
{
int x = 5;
int y = 10;
int z = Sum(x,y);
cout << "Sum = " << z << endl;
return 0;
}
В этой программе все просто. Есть две переменных x и y, и есть функция Sum, которая складывает два числа. Обозначение «cout <<» можно рассматривать как вариант функции printf.
Скопируйте этот текст и убедитесь, что все работает.
4. Главный секрет C++
А теперь мы напишем ту же самую программу, но уже с классами. И для этого нам нужно знать главный секрет C++.
Главный секрет C++:
Класс — это объединение кода и данных.
Как видите, секрет достаточно прост. Запишем нашу программу но уже с помощью класса:
# include <iostream>
using namespace std;
class Summa
{
public:
int x;
int y;
int Sum()
{
return x + y;
}
};
int main()
{
// Программирование с классами
Summa s;
s.x = 6;
s.y = 12;
z = s.Sum();
cout << "Sum = " << z << endl;
return 0;
}
Итак, что мы сделали?
Мы создали класс Summa с помощью ключевого слова class. Но класс — это просто шаблон. Для использования класса нужно получить экземпляр класса. Это мы сделали в строке «Summa s;». После того, как эта строка выполнится, мы получим экземпляр класса, к которому же можно обращаться. При этом переменные класса называются свойства, а функции класса называются методы.
Обратите внимание, что функция Sum не требует указания параметров, потому она берет эти параметры из свойств класса.
Обращение к свойствам и методам производится с помощью точки. Например, «s.x» — означает, что мы обращаемся к свойству экземпляра s класса Summa.
Ключевое слово public означает, что свойства и методы класса доступны вне класса.
5. Наследование классов
И теперь познакомимся с ключевым понятием программирования в классах — наследованием.
Опять же сравним с чистым Си.
Допустим, что нам нужно не только суммировать числа, но и удвоить результат. В языке Си один вариантов это сделать — использовать вложенную функцию:
int Sum(int x, int y)
{
return x + y;
}
int Sum2(int x, int y)
{
return Sum(x,y) * 2;
}
В этом примере функция Sum2 использует вызов функции Sum. Важный момент здесь в том, что те параметры, которые были переданы на вход функции Sum2 просто передаются на вход функции Sum. Такая сквозная передача параметров — это обычная практика C.
Но мы видели, что в классе мы параметры не использовали. Как же их передать? Для этого в C++ используется наследование.
# include <iostream>
using namespace std;
class Summa
{
public:
int x;
int y;
int Sum()
{
return x + y;
}
};
class Summa2 : public Summa
{
public:
int Sum2()
{
return Sum() * 2;
}
};
int main()
{
// Программирование с классами
Summa s;
s.x = 6;
s.y = 12;
cout << "Sum = " << s.Sum() << endl;
// Наследование класса
Summa2 s2;
s2.x = 7;
s2.y = 13;
cout << "Sum = " << s2.Sum2() << endl;
return 0;
}
В этом примере в строке «class Summa2 : public Summa» мы указываем, что класс Summa2 наследуется от класса Summa. Это позволяет обратиться к свойствам и методам наследуемого класса.
Там где в С используются вложенные функции, там в C++ используются вложенные классы.
На самом деле, из-за того, что класс объединяет данные и код, возникает масса проблем, поэтому с классами связаны еще многие ключевые слова. Но суть программирования в классах они не меняют, а только вносят сумбур в головы начинающих программистов.
И несколько слов надо сказать про рекламную чепуху вокруг C++. Обычно в книжках про C++ пишут о том, что программирование в классах позволяет не больше и не меньше как моделировать весь мир. Это весьма странное заявление. Любая программа — это код и данные. Их можно написать отдельно, можно объединить в общую структуру, но от этого принципиально ничего не меняется. Любая программа на С может быть переписана в классах, а любая программа в классах может быть переписана на С.
То есть C++ не дает программисту какого-то ключевого преимущества, именно поэтому язык C++, который позиционировался как замена C, так и не смог его заменить. Для интереса можно посмотреть TIOBE-рейтинг этих языков в сентябре 2018.
Можно ли стать программистом за год с нуля?
Читайте в моей бесплатной мини-книге «Путь в программисты». Скачать её можно здесь.