- •1. Понятие модуля. Принципы модульного программирования. Понятие объекта как динамического модуля.
- •2. Понятие класса. Понятие метода. Представление метода в виде обычной процедуры. Понятие конструктора и деструктора.
- •3. Понятие свойства. Методы получения и установки значений свойств. Свойства-массивы (в некоторых языках программирования). Индексаторы (в некоторых языках программирования).
- •Информация о типе времени выполнения программы
- •5. Классы в программных модулях. Атрибуты доступа к элементам объектов. Термин «инкапсуляция».
- •Термин «инкапсуляция»
- •Virtual – в базовом классе
- •7. Понятие ссылки на метод объекта (или делегата – в зависимости от языка программирования). Понятие события. Применение ссылок на методы для расширения объектов.
- •8. Понятие метакласса (в некоторых языках программирования). Методы, применяемые к классам. Виртуальные конструкторы (в некоторых языках).
- •Понятие метакласса (в некоторых языках программирования)
- •Виртуальные конструкторы (в некоторых языках)
- •3) Finally – вызвать free.
- •Если глобально-уникальный идентификатор назначается интерфейсу, то он записывается после ключевого слова interface и заключается в квадратные скобки, например:
- •Microsoft Visual Studio
- •Import Network;
- •Var Stat: SocketStat;
- •Var SocketStatCollection: … ;
- •Конструкторы и деструкторы
- •Стандартные конструкторы
- •Создание объектов по значению (на стеке) и по ссылке (в динамической памяти)
- •Операторы new и delete
- •Размещающий оператор new
- •Порядок конструирования и разрушения объектов
- •Вложенные определения классов
- •«Друзья» класса
- •Статические члены класса
Вложенные определения классов
В С++ внутри класса можно определить другой класс:
class TTextReader
{
public:
class TItems
{
...
};
...
};
Эта запись по смыслу соответствует следующей записи:
class TTextReader::TItems
{
...
};
Class TTextReader
{
friend class TTextReader::TItems;
};
Таким образом, определения классов и других типов данных внутри класса означает использование имени внешнего класса как пространства имен.
«Друзья» класса
Для того, чтобы объекты некоторого класса могли получить доступ в private и protected полям другого класса, используется оператор friend, который разрешает доступ ко всем записям и методам класса для того класса, который указан в операторе. Данный оператор используется внутри класса, с его помощью нельзя разрешать доступ к членам класса извне, иначе это нарушит принцип сокрытия данных.
Друзья не могут быть виртуальными функциями, поскольку они не являются членами класса, а виртуальными функциями могут быть только члены.
Поскольку дружественная функция фактически не является членом класса, то она не наследуется . Однако вам может понадобиться, чтобы друг производного класса использовал друга базового класса. Способ осуществления этого предполагает приведение типа ссьлки или указателя производного клаcca к эквиваленту базового класса и последующее применение нового указателя или ссылки для обращения к другу базового класса:
Статические члены класса
Поля и методы класса могут быть объявлены при помощи слова static:
class TTextReader
{
public:
...
static char*ClassName();
...
private:
static int m_ObjectCount;
...
};
По смыслу данный код эквивалентен следующему:
class TTextReader
{
friend char* TTextReader::ClassName();
...
};
сlass TTextReader::ClassName()
{
...
};
int TTextReader::m_ObjectCount;
Если поле объявлено с ключевым словом static, то это – обычная глобальная переменная, для которой имя класса используется как пространство имен. Если метод объявляется с этим словом, то это – обычная глобальная функция, которая является другом класса. Такая функция не имеет псевдо-параметра this.
