Свойства. Динамические и виртуальные методы

Конструкторы и деструкторы.

Абстрактные методы

Динамические и виртуальные методы.

Методы

Поля

Составляющие класса

Поле — это просто другое название для элемента данных класса.

- Статические;

- Динамические и виртуальные;

- Абстрактные;

- Конструкторы и деструкторы;

- Методы класса;

- Перегружаемые методы (одноименные методы).

В Builder чаще всего используются динамические перекрываемые методы (dinamic).

Разница между VMT и DMT:

В DMT заносятся только адреса методов данного класса, а в VMT заносятся не только адреса метода данного класса, но и всех его родителей.

VMT обеспечивает более быстрый поиск, при обращении к динамическому методу сначала просматривается таблица объекта, а затем таблицы всех его родителей. Для перекрытия динамического и виртуального методов используется директива override.

Это динамические перекрываемые методы, которые определены в родительском классе и не содержат никаких действий и никогда не вызываются и должны быть перекрыты в классах потомков.

В грамотно составленной программе абстрактные методы никогда не вызываются. Классы, содержащие абстрактные методы, называются абстрактными.

Такие классы инкапсулируют, свойства своих неабстрактных потомков.

Для того чтобы использовать абстрактный класс и его методы, создаются классы потомки, в которых перекрываются абстрактные методы.

Имя конструктора совпадает с именем класса. Конструктор не должен возвращать значений.

Деструктор у класса не может иметь параметров.

Кроме того, в Builder по умолчанию создаётся конструктор копирования. Конструктор копирования является конструктором специального вида, который принимает в качестве параметра ссылку или константную ссылку на объект данного класса. Компилятор генерирует конструктор копии по умолчанию, который производит простое копирование данных объекта в новый представитель класса.

Пример 3

// Операция new, допускающая форму размещения:

inline void *operator new(size_t, void* p)

{

return p;

}

class Dummy

{

public:

Dummy() // Конструктор.

};

Dummy gblDummy;// Глобальный объект.

int main ()

{

InitSystem(); // инициализация.

new(&gblDummy) Dummy; // Вызывает конструктор для gblDummy.

return 0;

}

Свойства реализуют специальным механизмом классов, реализующий доступ к полям.

Свойства включают:

- информационное поле;

- метод записи информации;

- метод чтения информации.

На первый взгляд свойство компонента не отличается от обычного элемента данных класса (поля). Свойству можно присваивать значение, извлекать из него значение и вообще вроде бы делать с ним все то, что делают с простым полем.

Обычно свойство связано с некоторым полем и определяет методы класса, которые должны использоваться при записи в поле и чтения.

Описание свойства:

class tMyClass {

int A;

int Getf();

void Self (int v);

_property int pF = {read = GetF, write = this};

};

В контексте программы свойство ведет себя как обычное поле.

Все стандартные классы имеют 100 % защищенность своих полей, т.е. все поля классов продублированы с помощью свойств. Напрямую к полю стандартного класса обратиться нельзя. Свойство можно проинициализировать, чтобы оно принимало какое-то значение.

Обычно определение свойства появляется либо в разделе Public, либо в Published. Published – cвойство, доступно на этапе проектирования. Public – свойство доступно на этапе выполнения.

При перекрытии можно:

- заменять методы доступа на другие;

- добавить недостающие методы;

- повышать видимость.

Нельзя:

- понижать видимость;

- удалять методы доступа.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: