- •5В070300 «Информационные системы»
- •Введение
- •Содержание отчета
- •Лабораторная работа № 1
- •1 Порядок выполнения лабораторной работы:
- •Постановка задачи
- •Методические указания
- •2 . Пример
- •Лабораторная работа № 2
- •1 Содержание работы
- •1 Порядок выполнения лабораторной работы:
- •Задание
- •2. Пример
- •Лабораторная работа№ 3
- •1 Порядок выполнения лабораторной работы:
- •Задание
- •Часть вторая: Оператор выбора
- •1 Порядок выполнения лабораторной работы:
- •Задание
- •Группа а Таблица 7
- •Группа в
- •2. Примеры
- •Лабораторная работа№ 4
- •1 Порядок выполнения лабораторной работы:
- •Задание
- •2 Примеры
- •For (выражение1; выражение2;выражение3) {операторы; }
- •Лабораторная работа№ 5
- •1 Порядок выполнения лабораторной работы:
- •Задание
- •2. Примеры
- •3. Сортировка элементов массива
- •Сортировка выбором
- •3.2. Сортировка вставкой
- •3.3. Сортировка методом прямого выбора
- •3.4. Сортировка методом обмена
- •4. Указатели и одномерные массивы
- •Лаборатоная работа № 6
- •1 Порядок выполнения лабораторной работы:
- •2. Методические указания
- •3. Указатели и двумерные массивы
- •Лабораторная работа № 7
- •1 Порядок выполнения лабораторной работы:
- •Задание на строки
- •2.Краткие теоретические сведения
- •Лаборатоная работа № 8
- •1 Порядок выполнения лабораторной работы:
- •2. Теоретические сведения
- •Год рождения – 1978
- •Лабораторная работа № 9
- •1 Порядок выполнения лабораторной работы:
- •2. Примеры
- •Лабораторная работа № 10
- •1 Порядок выполнения лабораторной работы:
- •1.3. Задание для выполнения
- •2. Примеры
- •Лабораторная работа № 11
- •1 Порядок выполнения лабораторной работы:
- •1.3. Задание для выполнения
- •Лабораторная работа № 12
- •1 Порядок выполнения лабораторной работы:
- •2. Краткие теоретические сведения Объектно-ориентированный подход
- •Сущности и Объекты
- •Система типов
- •Инкапсуляция
- •Пример класса
- •Создание объектов. Конструкторы и деструктор
- •Наследование
- •Перегрузка функций
- •Полиморфизм
- •Функции-друзья
- •Абстрактные классы
- •Дополнительные возможности
- •Индивидуальные задания
- •2.1. Пример решения задания
- •Int windForce; // Сила ветра в баллах
- •Int startHeight; // Начальная высота
- •Int fuel; // Запас топлива
- •Результат выполнения программы:
- •Разновидности списков
- •Контрольные вопросы
- •Задание
- •Литература
- •Лабораторная работа № 9 Тема: Множества в Паскале.
- •Общие сведения
- •Лабораторная работа № 8 Тема: Применение записей в составлении программ.
- •Теоретические сведения
- •Задание
- •Контрольные вопросы.
- •Литература.
- •Список использованной литературы
Система типов
С++ – строго типизированный язык, то есть любая величина, с которой оперирует программа, относится к определенному типу. Тип величины задается в момент ее создания и не может быть изменен во время выполнения программы.
Встроенные типы – это целые со знаком и без знака и вещественные числа различной точности, булевские значения и символы. Программист может определять новые типы с помощью оператора typedef:
typedef char SimpleString[100]; // Обявление новых типов
typedef int Length;
SimpleString name, title; // Создание переменных новых типов
Length width, height;
Также, как и в С можжно использовать перечислимые типы (enum) и составные типы (структуры – с помощью ключевого слова struct).
Классы – это типы, которые определены пользователем. Общая структура класса выглядит следующим образом:
class ИмяКласса {
public:
// область открытых переменных и методов
protected:
// область защищенных переменных и методов
private:
// область закрытых переменных и методов
};
В определении класса и атрибуты (поля) и методы называются членами этого класса; их определения могут следовать в тексте определения класса в произвольном порядке.
В отличие от структур Си, структуры C++ фактически являются типами определяемыми пользователем, без использования ключевого слова typedef. Класс, имеющий все элементы типа public без каких-либо функций, является обычной структурой Си.
Инкапсуляция
Инкапсуляция в С++ обеспечивается наличием областей видимости членов класса:
открытые (общедоступные, public) – к которым могут обращаться любые внешние объекты. Эта область определяет внешний интерфейс класса;
защищенные (protected) – доступные только методам данного класса и потомков данного класса (то есть порожденным от него с помощью наследования);
закрытые (приватные, private) – доступным только для методов своего класса.
Приватные элементы недоступны потомкам своего класса, поэтому и понадобились защищенные элементы. Умелое использование уровней доступа повышает надежность программ и их способность к изменениям, ослабляя взаимозависимость между объектами.
Пример класса
Ниже приведен пример описания класса Банковского счета:
01: class Account // БанковскийСчет
02: {
03: public:
04: Account(int number) : // конструктор
05: accountNumber(number), amount(0)
06: {}
07: ~Account() {} // деструктор
08: void deposit(float sum); // положить на счет
09: void withdraw(float sum); // снять со счета
10: float balance() { // проверить баланс
11: return amount;
12: }
13: protected:
14: float amount; // сумма на счете
15: private:
16: long accountNumber; // номер счета
17: };
18: void Account::deposit(float sum) {
19: amount += sum;
20: }
21: void Account::withdraw(float sum) {
22: amount -= sum;
23: }
24: void main() {
25: Account a(12345L);
26: a.deposit(1000);
27: a.withdraw(300);
28: cout << a.balance();
29: }
Имя класса задается в строке 1, в открытой области видимости задаются конструктор и деструктор класса. Эти методы вызываются при создании и уничтожении экземпляров класса.
Конструктор определяет, каким образом новый объект типа класса будет создан, как будет проводиться выделение памяти и инициализация объекта. Его определение может включать инструкции для выделения памяти, присваивания значений элементам, преобразование типов, и все что угодно, необходимое для данного класса. Конструктор имеет то же имя, что и класс (строка 4). При вызове конструктора при помощи операции ':' после заголовка функции, и перед телом функции можно вызвать конструктор базового класса (родителя) или инициализировать собственные переменные (строка 5). В данном примере тело конструктора (строка 6) не содержит никаких операторов или вызовов функций.
Деструкторы уничтожают объекты класса, созданные перед этим конструктором, очищая значения и освобождая память. Деструкторы наследуют имена своих классов, с добавлением лидирующего знака тильда '~' (строка 7).
В строках 8 и 9 объявлены два метода класса не возвращающих значение (void) и принимающих один параметр. В строках 10-12 объявляется функция balance и, также, и определяется, так как там же задано и тело функции (внутреннее или inline определение).
Далее в строках 13-16 задаются два атрибута, один из которых является приватным. В строках 18-20 задается тело функции для метода deposit (аналогично в строках 21-23 – для withdraw). Обратите внимание на использование операции селектор области действия '::' между определяемым классом и функцией элементом. Имя класса Account используется для указания компилятору, к какому классу принадлежит withdraw (так как могут иметься и другие варианты withdraw, принадлежащие другим классам).
Далее в функции main создается переменная a типа Account с параметром, который передается функции-конструктору (строка 25) и вызываются методы класса deposit и withdraw (для вызова метода используется точка '.') – строки 26 и 27. В строке 28 баланс счета выводится на экран с использованием потока вывода cout (для работы с потоками необходимо подключить заголовочный файл iostream.h).
