
- •Объявление и определение класса.
- •Конструкторы и деструкторы ( типы конструкторов и деструкторов)
- •Дружественные функции.
- •Пеpегpузка опеpаций ( синтаксис operator)
- •Статические компоненты класса.
- •Пространства имен.
- •Иерархия классов ( последовательность работы конструкторов и деструкторов )
- •Доступ к наследуемым компонентам
- •Виртуальные функции (когда применяются, форма вызова)
- •Шаблоны ( пример template)
- •Ввод-вывод в файл. Сохранение объектов в файле.
- •Обработка исключений (блоки try, throw, catch)
- •Использование классов при организации исключений. Иерархия исключений
- •Паттерны и их классификация
- •Абстрактная фабрика.
- •Наблюдатель.
- •Классификация типов данных.
- •Массивы и строки. Оператор foreach
- •Классы, создание объектов.
- •Методы класса и их параметры.
- •Свойства класса.
- •Наследование и виртуальные функции. Механизмы наследования
- •Классы – интерфейсы.
- •Производные классы
- •Методы - члены класса
- •Виртуальные методы
- •Делегаты.
- •Создаем собственный делегат
Статические компоненты класса.
Описатель static в С++ имеет различное назначение в зависимости от контекста, в котором он применен.
Переменные и функции, объявленные вне класса и вне тела функции с описателем static, имеют область действия, ограниченную файлом, в котором они объявлены.
Переменные, объявленные как static внутри функции, видимы только внутри этой функции, но сохраняют свои значения после выхода из функции и инициализируются только при первом обращении к функции.
Компоненты класса также могут объявляться с описателем static, такие компоненты - данные являются общими для всех экземпляров объектов этого класса и размещаются в памяти отдельно от данных объектов класса. Доступ к static - компонентам класса возможен по имени, уточненному именем класса (именем типа) или именем объекта этого класса, причем к static - компонентам класса можно обращаться до создания экземпляров объектов этого класса. Статическое данное - член класса должно быть обязательно инициализировано вне описания класса:
class TBase //базовый класс для массивов всех типов
{ static int nw;
int size, //размер элемента
count, //текущее число элементов
maxCount, //размер выделенной памяти
delta; //приращение памяти
/* Другие компоненты класса TBase */
}
int TBase::nw =1; /* Инициализация статической компоненты класса */
Статические компоненты - функции могут вызываться до создания экземпляров объектов этого класса и поэтому имеют доступ только к статическим данным класса:
class X
{ static int sx1,sx2;
static void fsx ( int k);
int x1,x2;
/* Другие компоненты класса X */
}
int X::sx1 = 1;
int X::sx2 = 2;
int main ()
{ ..........
X:: fsx( 3 );
..............
}
Пространства имен.
Иерархия классов ( последовательность работы конструкторов и деструкторов )
Один класс может быть базовым для нескольких производных, производный класс может быть, в свою очередь, базовым для какого-либо класса и т.д. Если производный класс имеет несколько базовых, то такое наследование называется множественным. Принято называть ба-зовый класс родительским, а производный – потомком.
При создании объектов производного класса сначала автоматически вызываются конструкторы базовых классов согласно списку базовых классов в объявлении производного класса, а затем конструктор производного класса. Конструкторы базовых классов вызываются независимо от того, перечислены они явно в конструкторе производного класса или нет. Объекты разрушаются в порядке, обратном их созданию, т.е. вначале вызывается деструктор производного класса, а затем базового.
В базовом и производном классах функции могут иметь одно и то же имя и список параметров, но отличаться телом. (Такие функции называют подмененными.) Для различения функций используется оператор принадлежности.\\\
Объявлена иерархия классов двух простых геометрических объектов: окружности и цилиндра.
Программа составлена так, чтобы внутренние значения переменных г-радиус окружности и h-высота цилиндра определяли параметры создаваемых объектов. Базовый класс Circle моделирует окружность, а производный класс Cylinder моделирует цилиндр.
class SimpleButton: public : TButtonControl { public:
SimpleButton (int x, int y) ;
void Draw() ;
-SimpleButton() { } );
SimpleButton::SimpleButton(int x, int y) :
TButtonControl(x, y) { }
I void SimpleButton::Draw()
I { i outline->Draw();
1 )