Основы программирования на C++, PASCAL
пример 3 в разд. 3.23) с именем Drob, в котором значение дроби определено через структуру двух целых чисел (числитель и знаменатель), а к методам работы с дробью отнесены ввод дроби — функция Vvod; вычисление наибольшего общего делителя числителя и знаменателя — функция nod; сокращение дроби — функция Sokr; возведение дроби в целую степень — функция Stepen — и вывод дроби на экран — функция Print. Объявление соответствующего класса выглядит так:

Имеется в виду, что глобально по отношению к этому классу объявлена структура с именем Frac:
struct Frac{int P; int Q;};
Таким образом, пять методов реализованы пятью функциями, которые в объявлении класса представлены своими прототипами. Описания функций — членов класса производится отдельно. При этом нужно указывать, к какому классу принадлежит данная функция. Для этого используется операция принадлежности, знак которой ::. Например:
void Drob::Vvod(void)
(соut:<<"Числитель?"; cin>>A.P;
соut<<"3наменатель?"; cin>>A.Q;
}
В основной части программы (основной функции) класс Drob будет поставлен в соответствие определенным переменным в качестве типа. Например:
Drob Y;
После этого переменная Y воспринимается в программе как объект соответствующего класса. Для основной программы открыты только функции этого объекта. Следовательно, воздействовать на параметры объекта можно только через эти функции. Аналогично элементам структуры обращение к элементам объекта производится с помощью составного имени (через точку). Например: Y.Vvod().
Пример 1. Следующая программа на Си++ является аналогом программы на Турбо Паскале из примера 1 в разд. 3.23.


В результате выполнения этой программы на экране получим:

Наследование — второе фундаментальное понятие ООП. Механизм наследования позволяет формировать иерархии классов. Класс-наследник получает свойства класса-предка. Как и в Турбо Паскале, в классе-наследнике могут быть объявлены новые дополнительные элементы. Элементы-данные должны иметь имена, отличные от имен предка. Элементы-функции могут быть новыми относительно предка, но могут и повторять имена функций своих предков. Как и в Турбо Паскале, здесь действует принцип «снизу вверх» при обращении к функции: функция потомка перекрывает одноименную функцию своего предка.

