Дисциплина: Объектно-ориентированное программирование
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
![]() | «Московский государственный технический университет имени Н.Э. Баумана» (МГТУ им. Н.Э. Баумана) |
ФАКУЛЬТЕТ Информатика и системы управления
КАФЕДРА Компьютерные системы и сети
Отчет
по лабораторной работе № 10
Дисциплина: Объектно-ориентированное программирование
Название лабораторной работы: Создание контейнеров
Студент гр. ИУ6-21 __________________ Салып Б.Ю.
(Подпись, дата) (И.О. Фамилия)
Преподаватель __________________ __________________
(Подпись, дата) (И.О. Фамилия)
Москва, 2016
Цель работы:
Моделировать стек, в качестве элементов которого могут использоваться числа и слова. Операции: добавление элемента, удаление элемента, печать элементов стека. Создать класс - потомок, который содержит процедуру определения элемента, имеющего максимальную длину при печати. Тестировать полученную модель.
В отчете представить диаграмму классов и обосновать выбранную структуру представления данных.
Выбранная структура:
vector: позволяет, в отличие от list, получать доступ к элементам по индексу, поддерживает методы pop_back и push_back, необходимые для реализации стека
Диаграмма классов:
Код программы:
#include <iostream>
#include <list>
#include <vector>
#include <string>
#include <cstdlib>
#include <stdio.h>
#include <cstring>
using namespace std;
class ListItem {
private:
void* value;
public:
template <typename T>
ListItem(const T& Q) {
T* tmp = new T(Q);
value = (void*)tmp;
}
void* operator*()
{ return value; }
};
class MyVector : public vector<ListItem> {
public:
void display() {
for(int i = 0; i != 2; i++)
cout << *static_cast<int*>(*(this->at(i))) << ' ';
for(int i = 2; i != this->size(); i++)
cout << *static_cast<char**>(*(this->at(i))) << ' ';
cout << endl;
}
};
class MyVectorMod : public MyVector {
public:
void max() {
char* nums;
int maxnum, numb, len, max = 0;
for(int i = 0; i != 2; i++){
numb = *static_cast<int*>(*(this->at(i)));
len = 0;
while(numb){
numb/=10;
len++;
}
if(len > max) {
max = len;
maxnum = i+1;
}
}
for(int i = 2; i != this->size(); i++) {
nums = *static_cast<char**>(*(this->at(i)));
if(strlen(nums) > max) {
max = strlen(nums);
maxnum = i+1;
}
}
cout << "Max word number is: " << maxnum << endl;
}
};
int main() {
MyVector test;
test.push_back(34);
test.push_back(97);
char *str = "Hello";
test.push_back(str);
str = "qwerty";
test.push_back(str);
str = "ABCD";
test.push_back(str);
test.display();
test.pop_back();
test.pop_back();
test.display();
cout << endl;
MyVectorMod test2;
test2.push_back(34);
test2.push_back(97);
str = "Hello";
test2.push_back(str);
str = "qwerty";
test2.push_back(str);
str = "ABCD";
test2.push_back(str);
test2.display();
test2.max();
test2.pop_back();
test2.pop_back();
test2.display();
return 0;
}
Пример работы:
34 97 Hello qwerty ABCD
34 97 Hello
34 97 Hello qwerty ABCD
Max word number is: 4
34 97 Hello
Вывод:
С++ содержит стандартные элементы реализации простейших структур данных.