Файл: Основные понятия объектно-ориентированного программирования (Базовые понятия).pdf
Добавлен: 04.04.2023
Просмотров: 97
Скачиваний: 1
Введение
Повсеместная распространенность персональных компьютеров, их использование для решения широкого спектра задач и всё растущая потребность в автоматизации тех или иных процессов и расчётов диктуют определённые требования к разработке прикладных программ: постоянные улучшения функциональности и внешнего вида, высокая скорость работы, способность быстро добавлять и удалять части приложения.
Созданный в 1983 году язык программирования C++ до сих пор активно развивается и способен выполнять все вышеуказанные задачи. Он позволяет писать структурированный высокопроизводительный код и используется для широкого списка задач от микроконтроллеров, до научных вычислений и компьютерных игр.
Таким образом актуальность выбранной мною темы определяется широким распространением использования языка C++ для решения самых разных задач.
Целью данной курсовой работы является изучение основ программирования и реализация программ на языке C++ с использованием объектно-ориентированного подхода.
Для этого требуется выполнить следующие задачи:
- Изучить понятия типов данных и самые распространенные из них в языке C++;
- Изучить алгоритмические структуры: условия и циклы;
- Изучить основных понятий ООП в рамках C++ (классы, объекты, полиморфизм и др.);
- Изучить особенности организации кода в C++;
- Самостоятельно разработать учебное приложение на языке C++ с использование объектно-ориентированного подхода.
Глава 1. Язык C++
История языка
Язык C++ был создан одним из работников известной компании Bell Labs - Бьерном Страуструпом. Ему хотелось объединить силу и скорость языка C с высокоуровневой абстракцией, которую давали такие языки, как Simula или Smaltalk. Так он начал работу над новым языком, которые сперва назывался C с классами. Первоначально язык разрабатывался самим Страуструпом и лишь в конце 90-ых годов был опубликован первый международный стандарт известный как C++ 98 разработанный специальным комитетом из ISO (International Organization for Standardization – международной организация стандартизации).
Язык быстро завоевал популярность среди программистов благодаря простоте перехода с C, возможностям использовать различные подходы для создания программ и хорошей реализации объектно-ориентированных принципов. C++ до сих пор активно используется при решении различного спектра задач. Нередко на нем пишут не все приложение целиком, а ту часть, где требуется наибольшая производительность, находя, таким образом, компромисс между скоростью разработки и производительностью.
Несмотря на свой возраст, язык до сих пор активно поддерживается и развивается. В последние годы новые стандарты языка выпускаются каждые 3 года – C++ 11, C++ 14, C++ 17 и уже известны некоторые нововведения C++ 20.
Базовые понятия
Любая программа на языке C++ начинается с определения функции main (Рисунок 1).
Рисунок 1. Функция main.
Запуск программы по сути является запуском данной функции. Ключевое слово int означает тип данных, которые возвращает функция. Операция возвращения данных происходит с помощью ключевого слова return. В случае с функцией main любое число отличное от нуля означает, как правило, что во время выполнения программы произошла какая-то ошибка.
В состав языка входят различные библиотеки, которые можно использовать сразу же. Одна из самых часто используемых на этапе изучения языка библиотек – iostream (in-out stream – поток ввода-вывода). Подключение библиотеки выполняется с помощью инструкции #include <название библиотеки>;. Библиотека iostream позволяет использовать такие методы, как std::cout и std::cin для вывода текста в консоль и считывания ввода из консоли соответственно (Рисунок 2).
Рисунок 2. Использование библиотеки iostream.
Здесь мы на 1 строчке подключаем библиотеку. На 5 строке в консоль выводится традиционное сообщение «Hello, world!». Символ \n означает перевод строки.
На 6 строке объявляется переменная с типом int и на 7 строке ей присваивается значение, введенное пользователем в консоли. Переменную можно представить, как некий ящик, в котором хранится то или иное значение. Тип данных означает, что в этот ящик можно положить только определенные значения. Запись вида int a; называется объявлением переменной, а запись a = 2; - инициализацией переменной. При желании можно объявлять переменные и производить их инициализацию в одном выражении (например, int a = 22;).
Типы данных
C++ является языком со строгой типизацией. Это означает, что у каждой переменной должен быть явно задан её тип.
Целочисленные переменные обозначаются short (short int), int, long (long int) и long long (long long int). Они занимают разное количество байт и соответственно могут числа в определенном диапазоне. Кроме того, каждому типу может предшествовать ключевое слово signed или unsigned. Слово unsigned означает, что переменная не может хранить отрицательные числа, что увеличивает максимальное положительное число, которое можно в неё записать.
Таблица 1.
Целочисленные типы данных
Тип данных |
Знак |
Диапазон |
Размер, бит |
short |
signed |
от -32767 до 32767 |
>=16 |
short |
unsigned |
от 0 до 65535 |
>=16 |
int |
signed |
от -2 147 483 647 до 2 147 483 647 |
>=32 |
int |
unsigned |
от 0 до 4 294 967 295 |
>=32 |
long |
signed |
± 9,22 · 1018 |
>=64 |
long |
unsigned |
от 0 до 1,84 · 1019 |
>=64 |
long long |
signed |
± 9,22 · 1018 |
>=64 |
long long |
unsigned |
от 0 до 1,84 · 1019 |
>=64 |
Нужно отметить, что размер и соответственно диапазон варьируется в зависимости от процессора и компилятора. При этом всегда гарантировано, что sizeof(long long) >= sizeof(long) >= sizeof(int) >= sizeof(short), где sizeof() возвращает размер. Таким образом, в переменную типа long гарантировано можно записать значение из переменных типа int и short.
Для записи чисел с плавающей точкой используются переменные типа float, long float и double. При этом long float и double имеют, как правило, один и тот же размер.
Таблица 2.
Типы данных с плавающей точкой
Тип данных |
Знак |
Диапазон |
Размер, бит |
float |
signed |
от -2 147 483 648.0 до 2 147 483 647.0 |
32 |
float |
unsigned |
от 0 до 4 294 967 295.0 |
32 |
long float |
signed |
± 9,22 · 1018 |
64 |
long float |
unsigned |
от 0 до 1,84 · 1019 |
64 |
double |
signed |
± 9,22 · 1018 |
64 |
double |
unsigned |
от 0 до 1,84 · 1019 |
64 |
Для представления символов используется тип char, который занимает 1 байт. Такой же по размеру тип bool используется для представления логических значений true/false.
По умолчанию в C++ нет типа данных для строк подобно тому, как это существует в других языках. Тем не менее, работать со строками можно при подключении стандартной библиотеки string (Рисунок 3).
Рисунок 3. Использование библиотеки string.
В стандартную библиотеку также входит тип vector похожий на массивы из других языков. Он позволяет хранить несколько значений одного типа в одной переменной. Значения можно добавлять при инициализации или позже с помощью метода push_back (Рисунок 4).
Рисунок 4. Использование типа vector.
Операторы
Как и во многих других языках программирования в C++ имеется стандартный набор операторов. Кратко рассмотрим их.
Арифметические операторы известны всем со школы. Это сложение (+), вычитание (-), умножение (*) и деление (/). Кроме них присутствует также оператор получения остатка от деления (%). Как и в математике, в C++ можно использовать скобки для обозначения приоритетности действий. Это касается всех операторов, а не только арифметических. Помимо этого, имеются операторы инкремента (++) и декремента (--). Они увеличивают и уменьшают значение переменной на 1 соответственно. При этом выражение int b = a++; сперва присвоит переменной b значение переменной a, и уже потом увеличит её значение. Выражение же int b = ++a; сперва увеличит значение переменной, а потом уже присвоит его переменной b.
Логические операторы используются в логических выражениях, которые возвращают тип данных bool. Список логических операторов представлен ниже в таблице.
Таблица 3.
Логические операторы
Оператор |
Название |
> |
Больше |
>= |
Больше или равно |
< |
Меньше |
<= |
Меньше или равно |
== |
Равно |
!= |
Не равно |
У отдельных классов могут быть определены свои операторы. Например, у уже рассмотренного объекта std::cout присутствует оператор <<. Кроме этого, отдельные операторы могут быть переопределены для отдельных классов. Так у класса std::string переопределен оператор + таким образом, что две строки соединяются в одну. Более подробно переопределение операторов рассмотрено во второй главе.
Условия и циклы
Упомянутые выше логические выражения, как правило, используются в таких конструкциях как условия и циклы. Условие позволяет в зависимости от какого-либо логического значения или выражения выполнять тот или иной код (Рисунок 5).
Рисунок 5. Использование условий.
Любое условие начинается с ключевого слова if, после которого в круглых скобках пишется логическое выражение. После этого в фигурных скобках пишется код, который будет выполнен. При необходимости можно добавить блок else, который обозначается соответствующим ключевым словом. Последующий код будет выполнен только в том случае, когда логическое выражение равно false. Между блоками if и else можно вставлять любое количество блоков else if. Таким образом, если первое логическое условие не равно true проверяется условие в блоке else if. Если оно не выполнено, то проверяется условие в следующем таком блоке или же выполняется код в блоке else.
Бывают случаи, когда блоков else if становится достаточно много, что затрудняет чтение кода. В таких случаях используют выражение switch (Рисунок 6).
Рисунок 6. Использование конструкции switch.
Здесь значение, идущее в скобках после ключевого слова switch, сравнивается со значениями после ключевого слова case и в случае их совпадения, выполняется код после двоеточия. Ключевое слово default используется для выполнения кода в случаях, когда проверяемое значение не совпало ни с одним из перечисленных в case-блоках значений. Стоит обратить внимание на то, что каждый блок заканчивается ключевым словом break, которое прерывает дальнейшую проверку. Если его не указывать, то при наличии блока default, код в нем будет выполняться всегда независимо от того, было ли совпадение ранее или нет. Так происходит, потому что после совпадения с одним из значений, программа продолжает проверять последующие значения, в том числе выполняя код в блоке default.
Часто какой-то код требуется выполнить много раз. В этом случае используются циклы. В C++ есть несколько различных циклов.
Цикл for используется обычно, когда известно точно, сколько раз нужно прогнать код (Рисунок 7).
Рисунок 7. Цикл for.
При этом выражение в круглых скобках состоит из трех частей, разделенных точкой с запятой. В первой части определяется и инициализируется переменная-счетчик. Вторая часть является логическим условием выхода из цикла. То есть цикл продолжается до тех пор, пока это условие верно. Третья часть – изменение переменной-счетчика. Это не обязательно инкремент или декремент. Здесь может быть любое выражение.