Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Создание и использование абстрактного типа Circle
Тип Vect предназначен для хранения вектора (массива) целых чисел. В более общем случае элементами вектора могут быть также объекты абстрактных типов, например, комплексные числа, точки на плоскости, различные геометрические фигуры. Рассмотрим в качестве примера абстрактный тип Circle (окружность), объекты которого содержат координаты центра окружности и ее радиус (рис. 5, 6, 7). Кроме конструкторов и методов, здесь в интерфейс абстрактного типа введено свойство Radius, которое предоставляет удобный и контролируемый доступ пользователей типа к закрытому полю r объектов класса Circle. Например, метод put свойства запрещает запись в поле r отрицательных значений. Наиболее полная информация о создании и использовании свойств на языке Visual С++ представлена в документации MSDN. Для обращения к ней необходимо выбрать опцию Contents в меню Help (или нажать кнопку Contents), установить в окне Contents фильтр Visual C++, а затем выбрать следующую последовательность опций: Development Tools and Languages -> Visual Studio -> Visual C++ -> Reference -> C/C++ Language Reference -> Lexical Conventions -> C++ Keywords -> property. В окне просмотра документации целесообразно установить фильтр для языка программирования: Language Filter -> C++.
#include < iostream> class Circle{ private: int x, y; // центр int r; // радиус (доступ через свойство Radius) public: Circle (); // конструктор по умолчанию Circle (int x1, int y1, int r1); Circle(const Circle& t); // конструктор копии Circle resize(int r1); Circle operator*( int r1); Circle move(int x1, int y1); double square() const; bool operator==(const Circle& t) const; Circle operator=(const Circle& t); void ToString(); void putprop(int j) // операция обновления свойства Radius { if(j> =0) r = j; } int getprop() { return r; } // операция чтения значения свойства __declspec(property(get = getprop, put = putprop)) int Radius; }; Рис.5. Описание класса Circle
#include " Circle.h" using namespace std; Circle:: Circle () // конструктор по умолчанию { x=0; y=0; r=1; } Circle:: Circle (int x1, int y1, int r1) { x=x1; y=y1; r=r1; } Circle:: Circle(const Circle& t) // конструктор копии { x=t.x; y=t.y; r=t.r; } Circle Circle:: resize(int r1) { r=r1; return (*this); } Circle Circle:: operator*(int k) { r*=k; return (*this); } Circle Circle:: move(int x1, int y1) { x=x1; y=y1; return (*this); } double Circle:: square()const { return 3.14*r*r; } bool Circle:: operator==(const Circle& t) const { if(square()==t.square()) return true; else return false; } Circle Circle:: operator=(const Circle& t) { x=t.x; y=t.y; r=t.r; return (*this); } void Circle:: ToString() { cout< < " [(" < < x< < ", " < < y< < " ), " < < r< < " ]" < < endl; }
Рис.6. Файл Circle.cpp
#include " Circle.h" using namespace std; void main() { Circle c1(10, 10, 50), c2; c1.move(30, 20); c1.resize(10); cout< < " c1="; c1.ToString(); c2=c1*5; cout< < " c2="; c2.ToString(); c2.resize(50); if ((c1==c2)) cout< < " Egual" < < endl; cout< < c2.Radius< < endl; // операция чтения c2.Radius=100; // операция записи cout< < c2.Radius< < endl; }
Рис.7. Программа Circleprog.cpp
ОБОРУДОВАНИЕ Персональный компьютер: процессор с частотой 1, 6ГГц или выше, 1024 МБ ОЗУ, жесткий диск со скоростью 5400 об/мин, видеоадаптер с поддержкой DirectX 9 и с разрешением 1280 х 1024 (или более высоким), операционная система Windows 7, интегрированные среды разработки приложений Visual Studio 2010 и Visual Studio Team System 2008 с комплектами документации MSDN, каталог Tprog\Lab3, содержащий файл Labtprog3.doc (методические указания к данной лабораторной работе) и исходные файлы Refer.cpp, Vect.h, Vect.cpp, Vectprog.cpp, Circle.h, Circle.cpp, Circleprog.cpp, не менее 200 Mб свободной памяти на логическом диске, содержащем каталог Tprog\Lab3.
ЗАДАНИЕ НА РАБОТУ
4.1. Ознакомиться с технологией создания и отладки абстрактных (пользовательских) типов на неуправляемом (unmanaged) языке Visual С++ в интегрированной среде разработки приложений Visual Studio 2010 в процессе создания приложений Refer, Vect, Circle. 4.2. Разработать и отладить объектно-ориентированную программу на неуправляемом (unmanaged) языке С++ в интегрированной среде разработки приложений Visual Studio 2010 в соответствии с заданием преподавателя. Примерами заданий могут быть следующие. 1. Разработать классы (h-файлы и cpp-файлы) Complex и Array (массив комплексных чисел), позволяющие использовать их в следующей программе: Complex x(1.3, 4.2), y(4.0, 8.1), z(y); x.add(y); z.assign(plus(x, y)); print(z); Array a1(10), a2(10); (a1[0]).assign(y); a2+=a1; a1=a2; a2.print(); Проверить согласованность операций классов Complex и Array, ввести свойства в абстрактные типы. Расширить приведенный фрагмент программы и проверить правильность его выполнения. 2. Разработать классы (h-файлы и cpp-файлы) Point и Array (массив точек), позволяющие использовать их в следующей программе: Point p1(10, 20), p2(40, 25), p3=p1; p3.assign(p2); mul(p3, 2); print(move(p2, 40, 20)); Array a1(10), a2(10); (a1[0]).assign(p1); (a1[1]).assign(p2); a2.assign(a1); print(a2); Проверить согласованность операций классов Point и Array, ввести свойства в абстрактные типы. Расширить приведенный фрагмент программы и проверить правильность его выполнения. 3. Разработать классы (h-файлы и cpp-файлы) Complex и Array (массив комплексных чисел), позволяющие использовать их в следующей программе: Complex x, y(4.0, 8.1), z(5.2, 6.0); x=5*y+z; x.print(); Array a1(10), a2(10); a1[0]=y; a2= -(a1); a1.assign(a2); a1.print(); Проверить согласованность операций классов Complex и Array, ввести свойства в абстрактные типы. Расширить приведенный фрагмент программы и проверить правильность его выполнения. 4. Написать тексты h-файлов и cpp-файлов для классов Point и Rect (прямоугольник). Описание классов:
Разработать и отладить программу создания и использования объектов классов Point и Rect. Проверить согласованность операций классов Point и Rect, ввести свойства в абстрактные типы. 5. Написать тексты h-файлов и cpp-файлов для классов Complex и Array (массив комплексных чисел). Описание классов:
Разработать и отладить программу создания и использования объектов классов Complex и Array. Проверить согласованность операций классов Complex и Array, ввести свойства в абстрактные типы.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
5.1. Проверить наличие на компьютере необходимого аппаратного оборудования и программного обеспечения, наличие 200 Мб свободной памяти на логическом диске, содержащем каталог Tprog\Lab3, наличие файла Labtprog3.doc и исходных файлов Refer.cpp, Vect.h, Vect.cpp, Vectprog.cpp, Circle.h, Circle.cpp, Circleprog.cpp в каталоге Tprog\Lab3. 5.2. Создать личный каталог, в котором будут размещаться создаваемые во время лабораторной работы проекты. 5.3. Создать в личном каталоге пустой проект неуправляемого консольного приложения, выбирая в IDE-среде в меню File следующую последовательность опций: New-> Project-> Other Language -> Visual C++ -> Win32 -> Win32 Console Application -> Empty Project, а затем добавить в него файл Refer.cpp, предварительно выполнив копирование в каталог проекта исходных файлов приложения. По команде Ctrl+F5 откомпилировать проект и выполнить приложение. Проверить правильность работы приложения. 5.4. Повторить выполнение пункта 5.3 для приложений Vect и Circle. Для смены файлов в проекте необходимо в окне Solution Explorer удалить файлы проекта из разделов Header Files и Source Files (выбирая в контекстном меню Exclude From Project), а затем добавить в эти разделы файлы нового приложения (выбирая в контекстном меню Add -> Existing Item). 5.5. Разработать и отладить объектно-ориентированную программу на неуправляемом (unmanaged) языке С++ в интегрированной среде разработки приложений MS Visual Studio.NET 2005 в соответствии с заданием преподавателя. Если при отладке возникают проблемы с устранением ошибок в программе, необходимо выделить ошибку в окне Error List и нажать клавишу F1. В появившемся окне документации MSDN будет приведены примеры исправления ошибки.
ОФОРМЛЕНИЕ ОТЧЕТА
Отчет должен содержать: · цель работы и индивидуальное задание; · тексты исходных файлов, содержащие описание и реализацию классов, используемых в лабораторной работе; · файлы *.h и *.cpp, содержащие описание и реализацию классов в соответствии с заданием преподавателя; · текст тестовой программы и результаты работы программы; · краткая информация о перегрузке операций в абстрактном типе.
КОНТРОЛЬНЫЕ ВОПРОСЫ
7.1. Чем обусловлено введение дружественных функций в языке С++? 7.2. Чем отличается реализация дружественной функции от функции-элемента класса? 7.3. Можно ли для абстрактного типа данных использовать символ операции, не используемый для обозначения стандартных операций языка С++? 7.4. Что дает использование ссылок при реализации функций? 7.5. Что означают слова lvalue и rvalue, появляющиеся иногда в сообщениях компилятора об ошибках? 7.6. Чем отличается инициализация от присваивания? 7.7. Какие операторные функции не могут быть дружественными функциями? 7.8. Как компилятор различает случаи использования стандартного и перегруженного операторов []? 7.9. Всегда ли выполняется определение обоих методов (get и put) при объявлении свойства? 7.10. Будет ли ошибка, если при создании нового типа данных не будет перегружен оператор присваивания?
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Подбельский, В.В. Язык Си+: учеб.пособие для вузов / В.В.Подбельский.— 5-е изд. — М.: Финансы и статистика, 2007 (2001, 2002, 2003, 2004, 2005, 2006).— 560с.: ил. 2. Павловская, Т.А. C/C++: Программирование на языке высокого уровня: учебник для вузов / Т.А.Павловская.— М.[и др.]: Питер, 2007 (2002, 2003, 2004, 2005, 2006).— 461с.: ил.3. Гарнаев А.Ю. Самоучитель Visual Studio.Net 2003. – СПб.: БХВ-Петербург, 2003. – 688 с. 3. Шилдт, Г. C+: базовый курс / Г.Шилдт; пер.с англ.и ред.Н.М.Ручко.— 3-е изд. — М.[и др.]: Вильямс, 2007 (2005).— 624с.: ил.5. Уоткинз Д., Хаммонд М., Эйбрамз Б. Программирование на платформе.NET. – М.: Издательский дом " Вильямс", 2003. – 368 с. 4. MSDN 2010. Электронная документация Microsoft для разработчиков программного обеспечения. – 500000 с.
ЛАБОРАТОРНАЯ РАБОТА N 4 Создание контейнерных объектов в программах на языке С++
ЦЕЛЬ И ЗАДАЧИ РАБОТЫ
Ознакомление с основными способами доступа к элементам объектов контейнерного типа и отслеживания скрытого представления сложных структур данных посредством создания и использования итераторов.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Контейнерные классы - это классы, объекты которых состоят из множества элементов. Например, массивы и списки обычно представляются в объектно-ориентированных программах в виде объектов контейнерных классов. Рассмотренные ранее классы stack, String и Vect являются контейнерными классами. Простейший способ доступа к элементам объекта контейнерного типа - это использование перегруженной операторной функции индексации. Однако данный способ имеет ряд недостатков. Во-первых, индексацию невозможно использовать для объектов-списков. Во-вторых, при использовании индексации на пользователя контейнерного типа возлагается необходимость организации последовательного доступа ко всем элементам контейнерного объекта. Для класса Vect организация последовательного доступа к элементам объекта может быть реализована посредством оператора for, например: Vect a=b; for(i=0; i< size; ++i) sum+=a[i]; Однако аналогичный подход к организации последовательного просмотра элементов списка ( элементов объекта класса List ) приведет к необходимости нарушения инкапсуляции хранимых данных и создания прикладных программ, учитывающих особенности реализации контейнерного типа. Популярное:
|
Последнее изменение этой страницы: 2016-05-03; Просмотров: 960; Нарушение авторского права страницы