
- •1. Понятие класса. Методы класса. Управление доступом к компонентам.
- •2. Объявление и определение класса. Внешнее определение функций.
- •3. Создание, копирование и удаление объекта.
- •4. Статические компоненты класса. Инициализация статических компонентов класса.
- •5. Наследование. Типы наследования. Виртуальное наследование.
- •6. Виртуальные функции
- •7. Абстрактные классы и чистые виртуальные функции. Интерфейс
- •8. Дружественность. Дружественные классы и функции.
- •9. Вложенные классы. Внутреннее и внешнее определение.
- •10. Шаблоны классов
- •11.Создание экземпляров шаблона. Инстанцирование.
- •12.Шаблоны и наследование.
- •13.Терминология шаблонов.
- •14. Параметры и аргументы шаблона.
- •15. Шаблоны компонентных функций
- •16. Полная специализация шаблонов.
- •17. Частичная специализация шаблонов.
- •18. Перегрузка операций. Основные понятия.
- •19. Перегрузка унарных операций.
- •20. Перегрузка бинарных операций.
- •Int test() {
- •Int test() {
- •Int test() {
- •// Делаем что-то
- •Вопрос 23
- •24. Группировка и композиция исключений. Повторная генерация. Перехват всех исключений.
- •25. Автоматическое управление ресурсами. Методика raii.
- •Void f() { FileOpen("myfile.Txt", "rt"); //здесь выполняем нужную работу с файлом //... }
- •Void f (int a) throw (x2, x3)
- •27. Стандартная библиотека. Организация стандартной библиотеки
- •28. Тип вектора. Вложенные типы. Итераторы. Доступ к элементам
- •29.Тип Вектора. Конструкторы. Операции со стеком. Списочные операции. Размеры и емкость.
- •30. Стандартные контейнеры. Вопросы производительности операций.
- •31. Процесс разработки по. Цели и этапы проектирования.
- •32. Процесс разработки по. Выявление классов. Определение операций.
- •33. Процесс разработки по. Определение взаимосвязей. Определение интерфейсов.
- •Этап 3: выявление зависимостей
- •Этап 4: определение интерфейсов
- •34. Паттерны проектирования. Основные паттерны.
- •35. Тестирование по. Методы тестирования.
11.Создание экземпляров шаблона. Инстанцирование.
Инстанцирование – это создание класса на основе шаблона путем подстановки аргументов в качестве параметров шаблонов.
template <class T>
class vec;
vec <int> a;
vec <float> b;
Два класса, порожденные от 1-го шаблона путем подстановки аргументов (в 1-ом int, во 2-ом float), явл-ся полностью различными и независимыми друг от друга.
Инструкция typedef для создания псевдонимов идентификатора.
vec <int> *a=new vec <int>;
{
vec <int> b(a);
std::cout << vec <int>::get_count();
}
typedef vec <int> vec_i;
vec_i *a= new vec_i;
{
vec_i b(a);
std::cout << vec_i::get_count();
}
12.Шаблоны и наследование.
class obj_count
{
static int _obj_count;
public:
static int get_count();
obj_count(){_obj_count++;}
~obj_count(){_obj_count--;}
};
Наследование шаблонного класса от обычного класса происходит по стандартным правилам наследования классов.
template <class T>
class vec:public obj_count;
{
...
}
В конструкторе общего вида производного класса неявно вызывается конструктор по умолчанию базового класса.
vec <int> a;
vec <float> b;
std::cout<<a.obj_count();
Наследование класса от шаблона.
template <class T>
class vec;
class vec_i_ptr:public vec <int*>
{
При наследовании класса от шаблона в качестве базового класса необходимо указать идентификатор шаблона с полным перечнем его аргументов.
Наследование шаблона от шаблона.
template <class T>
class vec;
template <class T>
class vec_ptr:public vec<T*>;
При наследовании шаблона от шаблона в качестве базового класса необходимо указать идентификатор шаблона, аргументами которого могут быть как конкретные типы, так и параметры производного шаблона.
template <class A, class B>
class a;
template <class A>
class b:
public: a <A,A> или a <A,int>
13.Терминология шаблонов.
template <class T>
class vec;
vec <int> a;
1.class T-список параметром шаблона.
2.vec-имя шаблона.
3.int-список аргументов шаблона.
4.vec <int>-идентификатор шаблона
5.template <class T>-объявление шаблона.
class vec;
14. Параметры и аргументы шаблона.
1. Параметры-типы
class - определенный пользователем тип.
typename - встроенный тип.
2. Параметры-шаблоны.
template< >
^
|
(template <class> class A)
3. Параметры-не-типы (ординарные).
template < >
^
|
int a
Значения параметров по умолчанию.
template< class T1, // параметр-тип
typename T2, // параметр-тип
int I, // параметр-не-тип
T1 DefaultValue, // параметр-не-тип
template< class > class T3, // параметр-шаблон
class Character = char // параметр по умолчанию
>
Аргументы шаблона.
1. Аргумент-тип - идентификатор стандартного или определенного пользователем типа.
2. Шаблонный аргумент – имя ранее определенного шаблонного класса. Специализация шаблонов для таких аргументов не допускается.
template <class T>
class cont;
cont <vec<int> > a;
3. Ординарный аргумент (аргумент-не-типа) – имя или выражение, подставленное вместо параметра имени типа. Параметр-не-типа не может быть void, вещественным, зато может быть указателем или ссылкой на вещественное значение; не может быть классом.