
- •2)Иерархия классов.
- •3)Методы (правила).
- •4)Порядок вызова методов.
- •5)Основные принципы ооп.
- •6)Пример использования указателя this.
- •7.8) Директивы Private, Public, Protected.
- •9)Статические методы.
- •10)Виртуальные методы.
- •12) Совместимость классов.
- •16)Указатель на объект. Операции динамического выделения памяти.
- •17)Чистые виртуальные функции. Абстрактные классы
- •Передача объектов как аргументов функций
- •Использование объекта в качестве возвращаемого значения.
1)Объектно-ориентированная модель – это описание, как самих объектов, так и способа их взаимодействия. Класс – это обыкновенный тип, но более сложный, чем простые типы данных. В программе, мы работаем с экземплярами (объектами класса)
(например переменная, типа – Integer)
результат типа
В литературе используются термины:
Класс – объект.
Объект – экземпляр объекта.
Класс – это дальнейшее развитие структур. Класс объединяет данные разных типов и функций. (функция – это действие, которое выполняется с этими данными)
Внутри класса данные – это поля, а функции – это методы.
К основным принципам ООП относят следующие понятия. Инкапсуляция – это объединение полей данных с группой действующих методов, которое формирует новый тип данных – класс.
Называют: функция инкапсулирована в описании объекта.
Наследование – создание иерархии классов для того, чтобы поля данных и методы предков автоматически становились полями данных и методами потомков. Наследование реализуется возможностью объединять класс с другим, во время объявления второго класса.
Полиморфизм – один и тот же метод внутри может иметь изменяемые части, в зависимости от того, каким объектом он может использоваться.
2)Иерархия классов.
Класс может наследовать компоненты из другого класса. Наследующий дочерний класс – потомок, а наследуемый – предок. Процедура наследования относится только к классам, но не к объектам. Потомки содержат все методы и поля предков.
При создании нового класса описываются только новые поля и методы. Если в родительском классе поле изменено, то у потомков тоже это поле изменено. Ни у одного потомка не должно быть полей, имена которых такие же как у любого из предков. А имена методов могут совпадать.
При наследовании классов важную роль играет статус доступа (статус внешней видимости) компонентов. Для любого класса все его компоненты лежат в области его действия. Тем самым любая принадлежащая классу функция может использовать любые компонентные данные и вызывать любые принадлежащие классу функции. Вне класса в общем случае доступны только те его компоненты, которые имеют статус public.
В иерархии классов соглашение относительно доступности компонентов класса следующее.
Собственные (private) методы и данные доступны только внутри того класса, где они определены.
Защищенные (protected) компоненты доступны внутри класса, в котором они определены, и дополнительно доступны во всех производных классах.
Общедоступные (public) компоненты класса видимы из любой точки программы, т.е. являются глобальными.
class B { protected: int t;
public: char u;};
class E: B { ... }; // t, и наследуются как private
class S: B { ... }; // t, и наследуются как public
Пр.2.2
class tPoint {
int x, y;
}
class tColorPoint : tPoint { – принцип наследования
unsigned char color;
}
Не допускается прямое обращение к полям. Принцип наследования является основным отличием ООП от структурного программирования.
Наследование одного класса от другого может продолжаться бесконечно, таким образом образуется иерархия классов.
Иерархия строится от общего к частному (координаты точки x, y, центр фигуры). Верхние классы иерархии обычно не имеют объектов – их называют абстрактные.
3)Методы (правила).
ООП исключает прямое обращение к полям. Для работы с полями используют методы.
Метод – процедура или функция объявленная внутри класса.
Внутри класса только заголовок метода. Тело метода можно описывать сразу после описания своего класса или после описания всех классов (предпочтительнее). Классы и их методы имеют общую область действия в памяти, поэтому имена формальных параметров метода и имена полей не должны совпадать.
Пр.2.3
class tlocation {
инкап-
public:
int x, y;
суляция void Init (int Init X, Init Y);
};
class tPoint: public: tlocation {
int color;
};
void tlocation:: Init(int Init X, Init Y)
{
x=Init X;
y=Init Y;
};
Main() {
tPoint p;
p.Init(23,56);
p.color= 14;
Пр.2.4
class tlocation {
public:
int x, y;
void Init (int Init X, Init Y);
};
void tlocation:: Init(int Init X, Init Y)
{
x=Init X;
y=Init Y;
};
class tPoint public: tlocation {
int color;
void Init (int Init X, Init Y, col);
};
void tPoint:: Init(int Init X, Init Y, col)
{
x= Init X; tlocation::Init(Init X, Init Y);
y= init Y;
color=col;
}
Begin…
p.Init(23,56,11);
end;
При описании метода указывается <имя класса>::<имя метода> при вызове метода указывается <имя объекта>.<имя метода>. В этом примере – перекрытие метода Init.(подавление). Метод Init класса tPoint перекрывает или подавляет одноимённый метод родительского класса.