И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина





НазваниеИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина
страница26/32
Дата публикации01.09.2013
Размер1.4 Mb.
ТипЛекция
100-bal.ru > Информатика > Лекция
1   ...   22   23   24   25   26   27   28   29   ...   32

6. Отношение параметризации


Рассмотрим описание простого класса "Стек " СStack.
class CStack {

public:

CStack();

void Push( int val );

int Pop();

bool IsFull();

protected:

int data[100];

int top;

};
У этого класса есть очевидный недостаток: он годится только для работы с целочисленными стеками. Чтобы стек можно было применять для хранения значений других типов, можно усовершенствовать описание класса с помощью конструкции параметризованных классов.
template

class CStack {

public:

CStack();

void Push( T val );

T Pop();

bool IsFull();

protected:

T data[100];

int top;

};
В этом новом варианте класса он описывается с помощью шаблона, в котором тип с формальным именем T является параметром шаблона. При создании объектов параметризованного класса требуется указывать тип-параметр шаблона в угловых скобках, например:

CStack doubleStack;

CStack<СGraphicalObject*> graphStack;

Объекты doubleStack (стек вещественных чисел) и graphStack (стек указателей на графические объекты) – это объекты совершенно разных классов, которые даже не имеют общего родительского класса. Тем не менее, они получены из одного параметризованного класса CStack.

Синтаксис реализации функций-членов параметризованного класса дополняется указанием параметра шаблона, например:
template

CStack::CStack()

{

top = 0;

}
template

void CStack::Push( T val )

{

data[top++] = val;

}
Параметризация безопасна с точки зрения типов. Например, при работе с объектами doubleStack и graphStack по правилам Си++ будет отвергнута любая попытка поместить в стек или извлечь из него что-либо кроме, соответственно, вещественных чисел или указателей на подклассы СGraphicalObject.

Отношения между параметризованным классом Stack и его инстанцированием для класса СGraphicalObject показаны на рис. 7.4.


Рис. 7.4. Отношение параметризации.
Как видно из рис. 7.4, чтобы инстанцировать параметризованный класс CStack, необходимо использовать другой класс, например, СGraphicalObject. Благодаря этому отношение параметризации подразумевает отношение использования.

При проектировании параметризованные классы позволяют выразить некоторые свойства протоколов классов. Класс экспортирует операции, которые можно выполнять над его объектами. Наоборот, параметризующий параметр класса служит для импорта классов и значений, предоставляющих некоторый протокол. Си++ проверяет их взаимное соответствие при компиляции, когда фактически и происходит инстанцирование.

7. Упражнения


  1. На основе перечисленных ниже понятий сформируйте описания классов, связанных друг с другом отношениями различных видов. Удостоверьтесь, что описания классов успешно проходят этап компиляции и можно создавать объекты этих классов (конструкторы и функции-члены классов можете не уточнять и просто сделать пустыми).

  • Классы "Двигатель", "Паровой двигатель", "Дизель" и "Двигатель внутреннего сгорания" связаны отношениями наследования.

  • Классы "Автомобиль", "Двигатель" и "Колесо" связаны отношением агрегации (предусмотрите, что у автомобиля должно быть 4 колеса).

  • Классы "Автомобиль", "Фирма-производитель автомобилей" и "Владелец автомобиля" связаны отношением ассоциации.

  • Классы "Автомобиль" и "Маршрутный лист " связаны отношением использования (у класса "Автомобиль" должна быть некоторая функция-член "Поездка по маршруту").

  1. Предположим, что на основе класса "Связный список" CList мы хотим построить класс "Упорядоченный список" COrderedList, в котором узлы вставляются в определенном порядке, а не просто в начало списка (порядок определяется операцией сравнения, применяемой к значениям узлов, например, для числовых значений возможен порядок "по возрастанию" или "по убыванию"). Наследование или агрегацию вы будете использовать в данном случае? Обоснуйте ваш ответ (описание классов на Си++ записывать не обязательно).

  2. Полутоновое цифровое изображение – это двумерный массив значений яркости. Опишите класс "Изображение" CImage, предназначенный для хранения подобных изображений.

У класса должно быть два конструктора: без параметров и с параметрами высота/ширина изображения. Во втором конструкторе должна динамически распределяться память для хранения данных изображения из расчета 1 байт на пиксел. В деструкторе эта память должна освобождаться.

Функции-члены класса должны позволять: получать и задавать значения яркости отдельного пиксела изображения по его координатам (строка/столбец изображения), рисовать изображение на экране и сохранять/загружать изображения из файла. Функции рисования и работы с файлами сделайте пустыми, только обеспечьте у них осмысленные заголовки.

Убедитесь, что описание класса CImage и реализация его функций-членов записаны корректно. Для этого попробуйте создать несколько объектов этого класса. Затем преобразуйте описание класса CImage в параметризованный класс, так, чтобы для хранения пиксела можно было использовать не только байты, но и целые или вещественные числа.

  1. Абстрактный тип данных "стек" можно реализовать по-разному – например, на основе массива (как это было показано ранее) или на основе связного списка. Разработайте описания классов CList и CStack так, чтобы показать, как можно реализовать стек целых чисел на основе связного списка с помощью наследования и агрегации. Можете ввести какие угодно методы для обоих классов. Какая техника реализации кажется вам более подходящей в данном случае?
1   ...   22   23   24   25   26   27   28   29   ...   32

Похожие:

И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПротокол №5 От 12 января 2012 г Заседания кафедры электроники и вычислительной...
Зав кафедрой Хакимова Г. Г. сообщила, что кафедра проводит 2-й Чемпионат по цифровой схемотехнике
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМетодические рекомендации по подготовке, оформлению, предзащите и...
В. А. Усков, заместитель декана естественно-географического факультета по развитию, доцент кафедры физической географии и методики...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПроблемы коммуникации
М. Е. Евсевьева (зав кафедрой, доцент А. А. Ветошкин); С. А. Борисова, директор Института международных отношений Ульяновского государственного...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма по формированию навыков безопасного поведения на дорогах...
Елена Святославовна Симакова, кандидат педагогических наук, доцент кафедры гуманитарных и естественнонаучных дисциплин Рязанского...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма курса по выбору «Орнитология» предназначена для студентов...
Автор программы: к б н., доцент, зав кафедрой биологии и химии Марина Николаевна Харламова
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРоссийской Федерации Федеральное государственное образовательное...
Петренко И. М., зав кафедрой экономической теории, д-р экон наук профессор Дулин М. П., зав кафедрой педагогики и психологии, д-р...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРахманкулова Людмила Кузьминична, кандидат филологических наук, доцент...
Автор программы: С. А. Виноградова, кандидат филологических наук, доцент, зав кафедрой английского языка и английской филологии
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма по формированию навыков безопасного поведения на дорогах...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconЛингвистические проблемы
Московского государственного педагогического института иностранных языков им. М. Тореза (зав кафедрой доцент Ю. А. Денисенко); д-р...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМгпу учебно-методический комплекс дисциплины
А. В. Прялухина, кандидат психологических наук, доцент, зав кафедрой психологии Российского государственного социального университета...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРабочая программа по дисциплине «теория экономического анализа»
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРабочая программа по дисциплине «международный менеджмент»
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМетодические рекомендации по написанию курсовых работ дисциплине
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconУчебное пособие Краснодар 2008
В. А. Оробец); кафедра паразитологии и ветсанэкспертизы Донского государственного аграрного университета (зав кафедрой, проф., к...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск