МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное агентство по образованию
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Учебный Центр Информационных Технологий «Информатика»
Лабораторная работа №4
по дисциплине «Объектно-ориентированное программирование»
Направление подготовки: 230105 - «Программное обеспечение вычислительной техники и автоматизированных систем»
Выполнил слушатель:
Вариант: 9
Дата сдачи: __/__/____
Преподаватель:
Новосибирск, 2016г.
Лабораторная работа № 4. Разработка шаблона.
1. Цель работы: разработать шаблон класса, реализующий структуру данных «стек».
2. Вариант № 9. Тип контейнера - стек. Размер буфера – параметр конструктора.
3. Описание программной реализации.
Проект скомпилирован в среде Microsoft VS и содержит четыре файла: интерфейс шаблонного класса Stack.h, интерфейс класса комплексных чисел Complex.h, реализация его методов Complex.cpp, и файл main.cpp.
Используемые функции:
— int menu() — функция программы, содержащая интерфейс и меню пользователя, выполняет вызовы других функций и методов, в соответствии с выбором пользователя.
— voidgotoxy(intx, inty) —функция, осуществляющая управление курсором. Помещает курсор в координаты, указанные в параметрах.
Методы шаблонного класса Stack:
— Stack(int count = 0) — конструктор по умолчанию.
— ~Stack() — деструктор.
— int getSize() — возвращает значение размера стека.
— voidpush() — метод внесения объекта в стек.
— Typepop() — метод получения объекта из стека.
— TypegetElement(int) — метод вывода любого объекта (для визуализации стека).
— intgetTop() — метод получения вершины стека.
4. Вывод
В ходе выполнения лабораторной работы я освоил разработку шаблона класса, реализующего структуру данных «стек».
5. Пример работы программы.
При запуске пользователю предлагается указать размер стека.
Затем на экране отображаются три области:
- содержимое стека – объекты, находящиеся в стеке, отображаются в порядке их добавления методом push;
- значение, полученное вызовом из стека с помощью метода pop;
- область меню.
Пользователь может приступить к заполнению стека, выбрав пункт «2».
Программа сообщает пользователю о заполнении стека.
Вывод данных из стека осуществляется нажатием клавиши «1».
Программа также сообщает о невозможности вывода из стека.
При выходе из программы происходит удаление всех элементов динамического массива и освобождается память.
6. Приложение. Текст программы.
Stack.h:
#pragma once
using namespace std;
template <typename Type>
class Stack
{
int size; // размер массива
int top; // вершина стека
Type *array = new Type[size]; // стек в виде массива
public:
Stack(int count = 0); // параметр конструктора - это размер стека
~Stack();
int getSize(); //
void push();
Type pop();
Type getElement(int);
int getTop();
};
template<typename Type>
Stack<Type>::Stack(int count = 0): size(count) // конструктор стека
{
top = 0;
}
template<typename Type>
Stack<Type>::~Stack() // деструктор
{
delete[] array;
cout<<"Стек удалён (количество объектов: "<<top<<")"<<endl;
_getch();
}
template<typename Type>
int Stack<Type>::getSize() // размер стека
{
return size;
}
template<typename Type>
void Stack<Type>::push() // положить в стек
{
if (top>=size)
{
system("cls");
gotoxy(10, 20);
cout<<"Переполнение стека!"<<endl;
return;
}
Type object;
cin>>object;
array[top++] = object;
}
template<typename Type>
Type Stack<Type>::pop() // взять из стека
{
return array[--top];
}
template<typename Type>
Type Stack<Type>::getElement(int num) // взятие нужного элемента
{
return array[num];
}
template<typename Type>
int Stack<Type>::getTop() // получить вершину стека
{
return top;
}
Complex.h:
#pragma once
#include <iostream>
#include <math.h>
using namespace std;
class Complex
{
static double const pi;
static int counter;
double real, image;
public:
Complex();
Complex(double, double);
Complex(const Complex &);
~Complex();
double mod();
double arg();
void show();
static int getCounter();
static void del(Complex* &);
void edit();
friend ostream & operator << (ostream &out, Complex &obj);
friend istream & operator >> (istream &in, Complex &obj);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.