
- •2)Иерархия классов.
- •3)Методы (правила).
- •4)Порядок вызова методов.
- •5)Основные принципы ооп.
- •6)Пример использования указателя this.
- •7.8) Директивы Private, Public, Protected.
- •9)Статические методы.
- •10)Виртуальные методы.
- •12) Совместимость классов.
- •16)Указатель на объект. Операции динамического выделения памяти.
- •17)Чистые виртуальные функции. Абстрактные классы
- •Передача объектов как аргументов функций
- •Использование объекта в качестве возвращаемого значения.
9)Статические методы.
Иногда необходимо, чтобы некоторые данные-члены класса были одинаковыми (разделяемыми) для всех экземпляров класса. Такие члены класса называются статическим и объявляются с применением модификатора static.
class My{//
static int count;
public:
static int getCount(){return count;}
};
int My::count = 0;//статические данные объявляются вне класса
Опр. Статическими называют методы адреса которых связываются с объектами во время компиляции программы и не изменяются до завершения работы программы.
Пр.2.6
class tlocation {
int x, y;
void Init(int InitX, int InitY);
}
class tPoint {
unsigned char color;
void Init(int InitX, int InitY);
void Move(int NewX, int NewY);
void Hide();
void Draw();
}
class tEllipse : tPoint {
unsigned char Rx, Ry;
void Init( … );
void Hide();
void Draw;
}
Ple
Move адр. tPoint.Move
tPoint.Move;
tPoint.Hide;
{адреса ячеек}
tPoint.Draw;
Возникает задача как сделать метод Move общим, но при этом, Чтобы всё работало правильно, то есть чтобы двигалась фигура, соответствующая объекту, вызывающего метод Move. Для её решения требуются методы, которые связываются с объектами не статически, то есть в процессе компиляции, а динамически, то есть в процессе выполнения программы.
Опр. Ранним связыванием называют процесс статического связывания метода с объектами
Поздним связыванием называют процесс динамического связывания метода с объектами.
Позднее связывание принципиально новый механизм, который обеспечивает полиморфизм, то есть разные способы поведения для разных объектов, но однородны в смысле наследования.
Полиморфизм – множественность форм – один и тот же метод может принимать различные формы.
10)Виртуальные методы.
Методы класса могут объявляться в C++ как виртуальные. К механизму виртуальных методов обращаются в тех случаях, когда в родительский класс необходимо поместить функцию, которая должна по-разному выполняться в дочерних классах. Точнее, по-разному должна выполняться не единственная функция из родительского класса, а в каждом дочернем классе требуется свой вариант этой функции. Любой нестатический метод родительского класса может быть сделан виртуальным, если в его объявлении использовать спецификатор virtual.
class base { public: virtual void f1 (void); }
Если в родительском классе объявлен какой – либо виртуальный метод, то это накладывает следующие ограничения на все дочерние классы. { Все наследники виртуального метода должны быть виртуальными. Заголовки всех реализаций (вниз по иерархии) одноименных виртуальных методов должны быть одинаковыми. (имя метода, количество и тип параметров совпадают). Каждый класс, в котором описан данный метод должен содержать конструктор.}
Таблицы виртуальных методов. VMT – Virtual Method Table.
VMT – структура, содержащая адреса виртуальных методов. Каждый класс, содержащий виртуальный метод имеет таблицу виртуальных методов.