Дисциплина: Объектно-ориентированное программирование

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Московский государственный технический университет имени Н.Э. Баумана» (МГТУ им. Н.Э. Баумана)

 

ФАКУЛЬТЕТ Информатика и системы управления

КАФЕДРА Компьютерные системы и сети

Отчет

по лабораторной работе № 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

 

Вывод:

С++ содержит стандартные элементы реализации простейших структур данных.