- •Динамические структуры данных. Сравнения статических и динамических структур данных. Область применения динамических структур.
- •Способы реализации динамических структур.
- •Достоинства и недостатки динамических структур.
- •Определение списка, стека, очереди.
- •Реализация динамических структур в stl.
- •Понятие наследования. Базовый и порожденные классы. Ключи доступа.
- •Ненаследуемые методы и операции.
- •Инициализация объекта порожденного класса.
- •Перегрузка функций.
- •Виртуальные методы.
- •Механизм позднего связывания.
- •Определение класса и объектов класса.
- •Элементы классов: поля и методы. Видимость элементов класса.
- •Указатель this.
- •Статические поля и методы класса.
- •Специальные методы класса — конструкторы и деструкторы.
- •Понятие дружественности.
Указатель this.
Внутри каждого метода неявным образом используется указатель this – это фиксированный указатель на объект, метод которого вызывается. Используется в специфичных случаях, например если в классе-наследнике необходимо вызвать методы базового класса, когда в наследнике они были переопределены. Обычно this опускается если нет нужды его использовать. Например внутри метода будут равносильны следующие строчки:
this.value = 1;
value = 1;
Статические поля и методы класса.
Статические поля и методы используются для доступа к ним без необходимости создания объекта (экземпляра) класса. Например могут быть вспомогательные методы, просто сгруппированные для удобства внутри одного класса. Важно: в статических методах отсутствует возможность обращения к this, так как вызывается метод не конкретно объекта, а всего класса.
Переменные и члены класса, объявленные с модификатором доступа static, называются статическими членами класса. Cтатические переменные и методы доступны без создания объекта данного класса. Имя статической переменной квалифицируется именем класса с использованием операции принадлежности :: , а не именем экземпляра класса.
Например:
class A
{
public:
static int iStat;
};
Статические методы могут вызывать и использовать только другие статические методы и статические переменные. Из статического метода нельзя выполнять вызов не статического метода - члена класса.
Специальные методы класса — конструкторы и деструкторы.
Когда класс описан можно создать переменную его типа, которая называется объектом класса. Допустим у нас описан класс CStr, примеры создания объекта класса:
CStr s1; // Создание пустой переменной типа CStr, в которой потом можно будет сохранить объект.
CStr s2(“ааа”); // Создание объекта класса с параметром «ааа» и сохранение его в переменной с именем s2.
CStr s3 = CStr(“bbb”); // Создание объекта класса с параметром “bbb” и сохранение его в переменной с именем s3.
В последнем случае явным образом использовался конструктор. Конструктор – это специальный метод класса, имя которого совпадает с именем класса. В каждом классе есть хотя бы один конструктор, если он не описан программистом то он создается автоматически. В классе может быть описано несколько конструкторов, обязательно с разными параметрами. При создании объекта обязательно (явным или неявным образом) вызывается один из конструкторов. Конструктор без параметров называется конструктором по умолчанию. Пример:
CStr(): { } // Конструктор по умолчанию который не имеет внутренней логики.
CStr(char * st) { initialize(st); } // Конструктор принимающий в качестве параметра указатель на символ (что является указателем на строке) и инициализируется вызовом внутреннего метода.
Специальным видом конструктора является конструктор копирования. Его единственным параметром является указатель на объект этого же класса. Пример:
CStr(const CStr & A) { … } // Внутри конструктора будет логика копирования полей.
В каждом классе есть специальный метод особого вида называемый деструктором. Он предназначен для очищения каких-либо динамических данных хранимых во внутренних полях, например массивов, списков. Деструктор вызывается автоматически когда объект выходит из области видимости. Например если объект был создан внутри метода а потом мы вышли из этого метода. Пример описания:
~CStr() { delete st; }; // Очищается указатель на хранимую внутри строку.