- •2)Иерархия классов.
- •3)Методы (правила).
- •4)Порядок вызова методов.
- •5)Основные принципы ооп.
- •6)Пример использования указателя this.
- •7.8) Директивы Private, Public, Protected.
- •9)Статические методы.
- •10)Виртуальные методы.
- •16)Указатель на объект. Операции динамического выделения памяти.
- •12) Совместимость классов.
- •17)Чистые виртуальные функции. Абстрактные классы
- •Передача объектов как аргументов функций
- •Использование объекта в качестве возвращаемого значения.
4)Порядок вызова методов.
Сначала компилятор ищет данный метод в классе, к которому принадлежит вызывающий объект, если не находит, то ищет метод в родительском классе и далее вверх по иерархии. Если метод не найден, то выдаёт сообщение об ошибке.
5)Основные принципы ооп.
Инкапсуляция – объединение полей записи с процедурами и функциями, работающих с полями этих записей, которое формирует новый тип объекта.
Наследование – создание иерархии классов для того, чтобы поля данных и методы предков автоматически были полями данных и методами потомков. Наследование полей и методов различны.
Полиморфизм – присвоение определённому действию одного имени, которое затем совместно используется по всей иерархии класса (сверху вниз), причем каждый класс иерархии выполняет характерным именно для него способом.
6)Пример использования указателя this.
В методе объекта на поля объекта, для которого она была вызвана, можно ссылаться непосредственно. Например:
class x {
int m;
public:
int Get_m() { return m; }
};
x aa;
x bb;
void main()
{
int a = aa.Get_m();
int b = bb.Get_m();
// ...
}В первом вызове метода Get_m(), m относится к aa.m, а во втором - к bb.m.
Указатель на объект, для которого вызван метод, является скрытым параметром метода. На этот неявный параметр можно ссылаться явно как на this. В каждом метода класса x указатель this неявно описан как
x* this;
и инициализирован так, что он указывает на объект, для которого была вызван метод. this не может быть описан явно, так как это ключевое слово. Класс x можно эквивалентным образом описать так:
class x {
int m;
public:
int Get_m() { return this->m; }
};
При ссылке на поля использование this излишне. Главным образом this используется при написании методов, которые манипулируют непосредственно указателями.
7.8) Директивы Private, Public, Protected.
Модификатор доступа |
Область видимости элементов раздела |
||
Из внешних функций |
Из методов наследуемых классов |
Из методов самого класса |
|
public |
Да |
Да |
Да |
protected |
Нет |
Да |
Да |
private |
Нет |
Нет |
Да |
Директивы private и public называются спецификаторами доступа. Спецификатор private означает, что элементы данных и элементы-функции, размещенные под ним, доступны только функциям-элементам данного класса. Это так называемый закрытый доступ.
Спецификатор public означает, что размещенные под ним элементы доступны как данному классу, так и функциям других классов и вообще любым функциям программы через представитель класса.
Есть еще спецификатор защищенного доступа protected, означающий, что элементы в помеченном им разделе доступны не только в данном классе, но и для функций-элементов классов, производных от него.
п. 8.1 Private
class obj{
Private:
Приватные (закрытые) поля;
Приватные методы;
Public:
Общедоступные поля;
Общедоступные методы;
}
class tlocation {
public:
int GetX() { return x };
int GetY() { return y };
Private:
Int x, y;
void Init(int InitX, int InitY);
}
{доступ к полям x, y и методу Init получить не возможно}
void tlocation::Init(int InitX, int InitY){
x= InitX;
y= InitY;
}
п.8.2 Public
class tlocation {
Private:
Int x, y;
Init( )
Public:
Int GetX();
Int GetY();
