Конструкторы и деструкторы.
Абстрактные методы
Динамические и виртуальные методы.
Методы
Поля
Составляющие класса
Поле — это просто другое название для элемента данных класса.
- Статические;
- Динамические и виртуальные;
- Абстрактные;
- Конструкторы и деструкторы;
- Методы класса;
- Перегружаемые методы (одноименные методы).
В 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 – свойство доступно на этапе выполнения.
При перекрытии можно:
- заменять методы доступа на другие;
- добавить недостающие методы;
- повышать видимость.
Нельзя:
- понижать видимость;
- удалять методы доступа.