Бакалавр
Дипломные и курсовые на заказ

Зависимость. 
Объектно-ориентированное программирование

РефератПомощь в написанииУзнать стоимостьмоей работы

Использование шаблонов реализует в языке С++ особый тип полиморфизма — параметрический полиморфизм. Теперь мы можем использовать один и тот же шаблон для целых и вещественных чисел. Префикс template делает Тype параметром объявления, которому этот префикс предшествует. В языке С++ можно определять шаблоны не только классов, но и функций. Typedef Stack IntStack // синоним класса стеков целых чисел. Читать ещё >

Зависимость. Объектно-ориентированное программирование (реферат, курсовая, диплом, контрольная)

Пример. Пусть управление температурой каждый объект класса Controller осуществляет в соответствии с задаваемым ему планом. План представим в виде экземпляра класса Plan.

class Plan;

class Controller{.

.. .

void process (Plan&);

.. .

};

Класс Plan упомянут как часть описания функции-члена process; это дает нам основание сказать, что класс Controller пользуется услугами класса Plan.

Отношение зависимости (использования) между классами означает, что изменение в спецификации одного класса может повлиять на другой класс, который его использует, причем обратное в общем случае неверно. Можно сказать, что один из классов (клиент) пользуется услугами другого (сервера).

Один класс может использовать другой по-разному. В нашем примере это происходит при описании интерфейсной функции. Отношение использования также имеет место, если в реализации какой-либо операции происходит объявление локального объекта используемого класса.

Инстанцирование

Пример. Представим, что нам необходимы стек целых чисел и стек контроллеров, управляющих температурой. Мы могли бы описать два стека:

class IntStack {.

int stack[100];

.. .

};

class ControllerStack {.

Controller* stack[100];

.. .

};

Другой, более разумный, подход — создать универсальный стек, который мог бы хранить элементы любого нужного нам типа. Для этого мы можем описать стек, содержащий указатели на нетипизированные элементы:

class Stack {.

void* stack[100];

... };

Однако это не безопасно с точки зрения типов. Никто не гарантирует нам, что пользователь не поместит в стек элемент одного типа, а взять захочет элемент другого типа.

Для реализации нашей идеи необходимо воспользоваться шаблоном или параметризованным классом. Шаблон служит для построения других классов и может быть параметризован другими классами, объектами или операциями.

Использование шаблонов реализует в языке С++ особый тип полиморфизма — параметрический полиморфизм.

template class Stack {.

Тype stack[100];

.. .

public:

void push (Тype);

Т рор ();

.. .

};

Префикс template делает Тype параметром объявления, которому этот префикс предшествует.

Инстанцирование — подстановка фактических параметров шаблона вместо формальных. В результате создается конкретный класс, который может иметь экземпляры.

Объявим нужные нам стеки:

typedef Stack IntStack // синоним класса стеков целых чисел.

typedef Stack ControllerStack // синоним класса стеков.

// контроллеров.

IntStack IS; // стек для целых чисел.

ControllerStack CS; // стек для контроллеров Объекты IS и CS — это экземпляры совершенно различных классов, которые даже не имеют общего суперкласса. Тем не менее они получены из одного параметризованного класса Stack.

Инстанцирование безопасно с точки зрения типов. По правилам C++ будет отвергнута любая попытка поместить в стек или извлечь из него что-либо, кроме целых чисел или указателей на экземпляры класса Controller, соответственно.

В языке С++ можно определять шаблоны не только классов, но и функций.

В качестве примера рассмотрим определение шаблона функции, служащей для определения максимального из двух элементов.

template Тype max (Тype x, Тype y){.

return (x > y)? x: y;

};

Теперь мы можем использовать один и тот же шаблон для целых и вещественных чисел.

int i, j, k;

double a, b, c;

.. .

k = max (i, j);

c = max (a, b);

Кроме того, возможно использовать этот шаблон и для объектов некоторого класса, если в нем определена операция «>» .

Показать весь текст
Заполнить форму текущей работой