В классе вполне можно объявить поле, инстанцировав некоторый шаблон. Например, мы можем реализовать простую очередь ограниченного размера на основе шаблонного класса TSimpleArray (см. листинг 11.4). Это может выглядеть так, как показано в листинге 11.6.
Листинг 11.6. Очередь с полем-шаблоном class TQueue
{ TSimpleArray<double, 100е> t; // поле-шаблон
public:
// методы
Как видите, объявление поля-шаблона ничем не отличается от объявления обычного объекта. Такая очередь практически ничем не отличается от очереди, реализованной на основе обычного массива.
К сожалению, при использовании этого класса не видно, сколько элементов и какого типа можно помещать в очередь:
TQueue q;
Поэтому более интересный вариант — объявить поле-шаблон в шаблоне. Перепишем нашу простую очередь в виде шаблона (листинг 11.7).
Листинг 11.7. Поле-шаблон в шаблоне
template <typename T, std::size_t N = 1000> // параметры очереди
class TQueue
{ TSimpleArray<T, N> t; // зависимое имя
public: // методы
};
Тогда при вызове можно видеть тип элементов и количество элементов:
TQueue<double> qt; TQueue<double, 500> queue;
Задания:
5. Создать абстрактный базовый класс Funct i on (функция) с виртуальными методами вычисления значения функции у = f(x) в заданной точке х и вывода результата на экран. Определить производные классы CubePolinom, Hyperbola
с собственными функциями вычисления у в зависимости от входного параметра х.
Уравнение полинома:
у = а х* + b х2 + с х + d. Уравнение гиперболы:
x2/a2-y2/b2= 1. Реализовать функцию вывода по образцу листинга 9.12.
6. Реализовать однокоренную иерархию для объектов чисел на основе абстрактного базового класса Number. Иерархия должна включать действительные (Real), комплексные (Complex) и дробные (Fraction) числа. Создать класс-контейнер, аналогичный TDeque, с элементами типа Number. Реализовать виртуальную функцию вывода по образцу листинга 9.12.
Если вы решили сделать небольшой ремонт в квартире своими силами, тогда вам потребуется хороший перфоратор, лучший выбор вы можете найти тут.
7. Преобразовать класс TCurrency в абстрактный и реализовать классы-наследники Rouble и Dollar. Операции реализовать как внешние функции, использовав прием виртуализации внешних функций (см. листинг 9.12). |