C++

Содержание
Введение
using namespace
Угадать число
Return Type
Multiple Files
Header Files
Strings
getline()
Где учить C++
Другие статьи о C++

Введение

C++ читается как си-плюс-плюс — компилируемый, статически типизированный язык программирования общего назначения.

Поддерживает такие парадигмы программирования, как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование. Язык имеет богатую стандартную библиотеку, которая включает в себя распространённые контейнеры и алгоритмы, ввод-вывод, регулярные выражения, поддержку многопоточности и другие возможности.

C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.

C++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования (подробнее о популярности C++ смотрите - здесь ). Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также игр.

Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C# .

Синтаксис C++ унаследован от языка C. Одним из принципов разработки было сохранение совместимости с C. Тем не менее, C++ не является в строгом смысле надмножеством C; множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико, но не включает все возможные программы на C.

Сайт, посвящённый стандартизации языка isocpp.org

Проверить какие функции поддерживает определённый компилятор можно на сайте cppreference.com

Компилирование

  1. Программист пишет код и сохраняет его в виде .cpp файлов.

    Обычно в .cpp файл нужно добавить подключение библиотек или других файлов - это делается с помощью #include


  2. Сперва по этим файлам проходи препроцессор и включает в них всё что нужно включить.

  3. После препроцессора в дело вступает компилятор.

    Компилятор обрабатывает эти .cpp файлы и делает из них .o файлы или .obj файлы.


  4. Линкер соединяет эти .o файлы в .exe файл.

В зависимости от того, в какой среде Вы будете работать у этих процессов могут быть свои детали, которые нужно будет знать. Возможно, именно изучение этих нюансов и вызовет наибольшие проблемы. Нужно быть к этому морально готовым.

Например, gcc может работать странно, если Вы запускаете компилятор командой gcc и нормально, если Вы запускаете g++

По умолчанию после компиляции создается файл a.exe который нужно отдельно запустить. Настроить поведение компилятора можно, например, с помощью makefile

Visual Studio по умолчанию компилирует все .cpp файлы, входящие в состав проекта.

using namespace std;

У начинающего изучать C++ может возникнуть вопрос: зачем перед main() понаписана куча кода.

Например, зачем писать using namespace std;

Можно не писать, но тогда при каждом использовании cout или, например, endl нужно будет непосредственно указывать из какого пространства имён Вы их берёте

Выглядеть это будет примерно так:

#include <iostream> int main() { std::cout << "Заходите на HeiHei.ru!" << std::endl << "Или на TopBicycle.ru" << std::endl << 2.5*4; return 0; }

Оператор :: имеет специальное название - Оператор расширения области видимости или Scope Resolution Operator

<< - Insertion Operator

Если Вы пользуетесь сразу несколькими библиотеками, то, возможно, так даже лучше - нет риска получить конфликт имён.

Но для начинающего изучать C++ это возможно слишком громоздко.

using namespace std; позволяет записать то же самое без постоянных std::

#include <iostream> using namespace std; int main() { cout << "Заходите на HeiHei.ru!" << endl << "Или на TopBicycle.ru" << endl << 2.5*4; return 0; }

Угадать число

Упраженение: написать игру, в которой пользователю нужно угадать заранее заданное число.

Нужно давать подсказки является ли введённое число большим или меньшим чем загаданное.

Решение:

#include <iostream> using namespace std; int main() { int i; bool keepgoing = true; int answer = 7; while (keepgoing) { cout << "Угадайте число "; cin >> i; if (i < answer) { cout << "Ваше число, " << i << ", меньше загаданного. " << endl; cout << "Попробуйте ещё" << endl; } if (i == answer) { cout << "Вы угадали, поздравляю, игра окончена" << endl; keepgoing = false; } if (answer < i) { cout << "Ваше число, " << i << ", больше загаданного. Попробуйте ещё" << endl; } if (i != answer) { cout << "Попробовать ещё? 0 for no "; cin >> again; if (again == 0) { keepgoing = false; } } } }

Пример функции, которая складывает два числа и не возвращает предупреждений об ошибках в типах int - double

#include <iostream> using namespace std; double add(double x, double y) { return x + y; } int main() { auto a = add(3, 4); cout << "3 + 4 is " << a; // 7 cout << endl; double b = add(1.3, 4.5); cout << "1.3 + 4.5 это " << b; // 5.8 return 0; }

Перегрузка функций

Две разные функции могут иметь одно и то же название. Это можно сделать если у них разное число аргументов. Такая перегрузка считается хорошей практикой.

Пример перегрузки функции add() можете изучить в статье

«Перегрузка функций C++»

Return Type

Как Вы уже заметили, в большинство функций заканчиваются на return 0;

Если вы пишете функцию, которая ничего возвращать не должна, нужно указать перед названием функции void

#include <iostream> using namespace std; void test() { return; }

Multiple Files

Файл можно разделить на несколько частей. В том, где Вы вызываете main() укажите названия функций, которые Вы перенесли в другой файл и аргументы, которые они принимают.

Главный файл:

#include <iostream> using namespace std; double add(double x, double y); double add(double a, double b, double c); bool test(bool x); bool test(double x); void test(int y); int main() {

и так далее

Файл с функциями:

bool test(bool x) { return x; } bool test(double x) { return x > 0; } double add(double x, double y) { return x + y; } double add(double a, double b, double c) { return a + b + c; }

Header Files

Чтобы не перечислять все функции которые Вы хотите использовать в главном файле можно упомянуть их в специальном Header файле с расширением .h

Затем этот файл нужно будет подключить к главному с помощью директивы #include

Главный файл:

#include <iostream> #include "Functions.h"

Файл Functions.h

double add(double x, double y); double add(double a, double b, double c); bool test(bool x); bool test(double x); void test(int y);

Файл Functions.cpp остаётся без изменений.

Strings

#include <iostream> #include <string> using namespace std; int main() { string name; cout << "who are you?" << endl; cin >> name; string greeting = "Hello, " + name; if (name == "Andrei") { greeting += ", I know you!"; } cout << greeting << endl; int l = greeting.length(); cout << "\"" + greeting + "\" is " << l << " characters long. " << endl; auto space = greeting.find(' ' string beginning = greeting.substr(space + 1); cout << beginning << endl; if (beginning == name) { cout << "expected result. " << endl; } return 0; }

Задача - сравнить два введённых слова и определить какое длиннее.

using namespace std; int main() { string word1; string word2; cout << "Enter first word" << endl; cin >> word1; cout << "Enter 2nd word" << endl; cin >> word2; if (word1.length() == word2.length()) { cout << "words have the same length"; } if (word1.length() > word2.length()) { cout << "word1 is longer"; } if (word1.length() < word2.length()) { cout << "word2 is longer"; } return 0; }

Этот код будет работать только если слово введено без пробелов.

Чтобы сравнивать длины строк воспользуемся getline()

#include <iostream> #include <string> using namespace std; int main() { string line1; string line2; cout << "Enter first word" << endl; getline(cin , line1); cout << "Enter 2nd word" << endl; getline(cin , line2); if (line1.length() == line2.length()) { cout << "words have the same length"; } if (line1.length() > line2.length()) { cout << "line1 is longer"; } if (line1.length() < line2.length()) { cout << "line2 is longer"; } return 0; }

Где учиться C++

Если бесплатно, то советую сайт ravesli.com .

Они перевели официальный учебный сайт C++ на русский язык и, как мне кажется, качество не пострадало.

Можно найти хорошие видео на русскоязычном youtube

Если у Вас есть возможность купить платный курс, начните с чего-нибудь не слишком дорогого.

Для тех, кто знает английский может подойти:

Eduonix . Они предлагают курс для новичков и несколько подобных.

На Pluralsight есть длинный курс по C++ но я не очень понял на кого он рассчитан. Для новичков там слишком много пропущено. Для опытных там слишком много вводной информации. Подойдёт только как дополнение к какому-то другому курсу.

На русском языке у OTUS есть курс для новичков и для продвинутых

Российские образовательные гиганты вроде Geekbrains Нетологии и Skillbox насколько я знаю не предлагают кусов по C++ возможно это связано с высоким входным порогом, низким хайпом и спецификой вакансий.

UPD: теперь курсы по С++ и даже C появились и на больших платформах.

Похожие статьи
Перегрузка функций
-c: Компиляция
Разбиение кода на части
Вектор
Указатели
Классы
SFML
Тетрис на C++ с библиотекой SFML2
SDL
Массив Структур
Как узнать тип переменной C++
Решение задач на C++
Как создать пустую строку в C++
Запросы к REST API на C++
Ошибки C++
Make
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@eth1.ru если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Хотите поддержать сайт материально
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......