- •Алгоритм.
- •Множественный выбор switch.
- •Оператор do … while ( с постусловием ).
- •Do оператор ;
- •Оператор цикла for.
- •Использование операторов break и continue в циклах.
- •Функции ввода-вывода.
- •Общий вид программы.
- •Вложенные циклы.
- •Адреса и указатели.
- •Массивы.
- •Int a[10] ; // целочисленный вектор из 10 элементов.
- •Векторы.
- •Сортировка вектора.
- •Матрицы.
- •Строки.
- •Подпрограммы.
- •Директива препроцессора #define .
- •Области видимости.
- •Классы памяти.
- •Рекурсия.
- •Подготовка к зачету.
- •Структуры.
- •Int ball [4] ; // описание третьего поля – оценки.
- •Очередь.
- •Линейные списки.
- •Деревья.
- •Int n, k ; // ее размерности
- •Void print ( void ) // печать матрицы
- •Определение методов вне класса.
- •Частные и общие данные.
- •Конструктор.
- •Перегрузка операторов.
- •Неявный указатель *this.
- •Дружественные функции.
- •Класс множество.
- •Наследование.
- •Объекто-ориентированное программирование.
- •Список вопросов к экзамену.
- •Литература.
Наследование.
Цель объектно-ориентированного программирования состоит в повторном использовании созданных классов. Это экономит время и силы.
Мы создали класс отрезок, совершенно логичным кажется то, что класс многоугольник является производным классом от базового класса отрезок. Он наследует многие его методы.
Наследование – возможность на основании существующих типов порождать новые.
Наследование используется, если два типа данных имеют что-то общее, тогда это общее следует организовать в виде отдельного базового типа, называемого предок, и далее использовать механизм наследования для получения нового класса – потомка. Потомок будет иметь свои дополнительные свойства, но и будет наследовать свойства базового типа.
Построение такой иерархии классов осуществляется при помощи данных, доступных потомку, ключевое слово – protected, что обеспечивает доступ производного класса к объектам базового.
Рассмотрим пример наследования на классах отрезок и многоугольник. Базовый класс отрезок ничем не будет отличаться от созданного нами ранее за исключением определения его объектов как protected. Создадим новый класс.
class cline {
protected : int x1, y1, x2, y2 ;
public : …
}
class cmanyline: public: cline // класс многоугольник
{
private : int n ; // объекты
int x[10][2] ;
// методы
public : cmanyline ( int r, int y[][2]) // конструктор многоугольника
{ n=k ;
for ( int i=0 ; i<n ; i++)
for ( int j=0 ; j<2 ; j++)
x[i][j] = y[i][j] ;
for ( int d=0 ; d<n-1 ; d++)
cline ( x[d][0], x[d][1], x[d+1][0], x[d+1][1]) ; // использует конструктор
// отрезка (базового класса)
cline ( x[n-1][0], x[n-1][1], x[0][0], x[0][1]) ;
}
void drow () { …} // функция рисования многоугольника, можно создать используя
… // аналогичную функцию отрезка. Для многоугольника можно
// создать новую функцию – раскраска.
}
Создание более сложной иерархии классов осуществляется так. Возьмем в качестве базовых классов классы отрезок и круг и построим класс наследник – фигура. Можно использовать и дружественные функции. Т.о. может выстроится сложная система переплетенных классов.
Объекто-ориентированное программирование.
Три ключевых принципа определяют объектно-ориентированное программирование:
- инкапсуляция данных;
- наследование данных;
- полиморфизм.
Инкапсуляция – сокрытие данных. Пользователю абстрактного типа данных ( нового класса) не нужно знать, что находится внутри него. Ему достаточно знать какие действия можно выполнять.
Наследование – возможность на основании существующих типов порождать новые.
Полиморфизм – способность объекта изменять форму во время выполнения программы. Для создания полиморфного объекта программа должна использовать указатель на него.
Но это уже предмет другого разговора!