Учебные материалы по математике | Запрограммировать на языке c++ класс-контейнер первого уровня | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Запрограммировать на языке c++ класс-контейнер первого уровня


virtual ~Triangle();

private:

size_t side_a;

size_t side_b;

size_t side_c;

};

#endif /* TRIANGLE_H */

Листинг Файла Triangle. cpp

#include "Triangle. h"

#include <iostream>

#include <cmath>

Triangle::Triangle() : Triangle(0, 0, 0) {

}

Triangle::Triangle(size_t i, size_t j, size_t k) : side_a(i), side_b(j), side_c(k) {

std::cout << "Triangle created: " << side_a << ", " << side_b << ", " << side_c << std::endl;

}

Triangle::Triangle(const Triangle& orig) {

std::cout << "Triangle copy created" << std::endl;

side_a = orig. side_a;

side_b = orig. side_b;

side_c = orig. side_c;

}

double Triangle::Square(){

double p = double(side_a + side_b + side_c) / 2.0;

return sqrt(p * (p — double(side_a))*(p — double(side_b))*(p — double(side_c)));

}

Triangle& Triangle::operator=(const Triangle& right) {

if (this == &right) return *this;

std::cout << "Triangle copied" << std::endl;

side_a = right. side_a;

side_b = right. side_b;

side_c = right. side_c;

return *this;

}

Triangle& Triangle::operator++() {

side_a++;

side_b++;

side_c++;

return *this;

}

Triangle operator+(const Triangle& left, const Triangle& right) {

return Triangle(left. side_a+right. side_a, left. side_b+right. side_b, left. side_c+right. side_c);

}

Triangle::~Triangle() {

std::cout << "Triangle deleted" << std::endl;

}

std::ostream& operator<<(std::ostream& os, const Triangle& obj) {

os << "a=" << obj. side_a << ", b=" << obj. side_b << ", c=" << obj. side_c << std::endl;

return os;

}

std::istream& operator>>(std::istream& is, Triangle& obj) {

is >> obj. side_a;

is >> obj. side_b;

is >> obj. side_c;

return is;

}

Листинг файла main. cpp

#include <cstdlib>

#include <iostream>

#include "Triangle. h"

#include "TStackItem. h"

#include "TStack. h"

// Simple stack on pointers

int main(int argc, char** argv) {

TStack stack;

stack. push(Triangle(1,1,1));

stack. push(Triangle(2,2,2));

stack. push(Triangle(3,3,3));

std::cout << stack;

Triangle t;

t = stack. pop(); std::cout << t;

t = stack. pop(); std::cout << t;

t = stack. pop(); std::cout << t;

return 0;

}

Лабораторная работа №3

Цель работы

Целью лабораторной работы является:

·  Закрепление навыков работы с классами.

·  Знакомство с умными указателями.

Задание

Необходимо спроектировать и запрограммировать на языке C++ класс-контейнер первого уровня, содержащий все три фигуры класса фигуры, согласно вариантов задания (реализованную в ЛР1).

Классы должны удовлетворять следующим правилам:

·  Требования к классу фигуры аналогичны требованиям из лабораторной работы 1.

·  Класс-контейнер должен соджержать объекты используя std:shared_ptr<…>.

·  Класс-контейнер должен иметь метод по добавлению фигуры в контейнер.

·  Класс-контейнер должен иметь методы по получению фигуры из контейнера (опеределяется структурой контейнера).

·  Класс-контейнер должен иметь метод по удалению фигуры из контейнера (опеределяется структурой контейнера).

·  Класс-контейнер должен иметь перегруженный оператор по выводу контейнера в поток std::ostream (<<).

·  Класс-контейнер должен иметь деструктор, удаляющий все элементы контейнера.

·  Классы должны быть расположенны в раздельных файлах: отдельно заголовки (.h), отдельно описание методов (.cpp).

Нельзя использовать:

·  Стандартные контейнеры std.

·  Шаблоны (template).

·  Объекты «по-значению»

Программа должна позволять:

·  Вводить произвольное количество фигур и добавлять их в контейнер.

·  Распечатывать содержимое контейнера.

·  Удалять фигуры из контейнера.

Полезный пример

Данный пример демонстрирует основные возможности языка C++, которые понадобится применить в данной лабораторной работе. Пример не является решением варианта лабораторной работы.

Листинг файла TStack. h

#ifndef TSTACK_H

#define TSTACK_H

#include "Triangle. h"

#include "TStackItem. h"

#include <memory>

class TStack {

public:

TStack();

void push(std::shared_ptr<Triangle> &&triangle);

bool empty();

std::shared_ptr<Triangle> pop();

friend std::ostream& operator<<(std::ostream& os, const TStack& stack);

virtual ~TStack();

private:

std::shared_ptr<TStackItem> head;

};

#endif /* TSTACK_H */

Листинг файла TStack. cpp

include "TStack. h"

TStack::TStack() : head(nullptr) {

}

std::ostream& operator<<(std::ostream& os, const TStack& stack) {

std::shared_ptr<TStackItem> item = stack. head;

while(item!=nullptr)

{

os << *item;

item = item->GetNext();

}

return os;

}

void TStack::push(std::shared_ptr<Triangle> &&triangle) {

std::shared_ptr<TStackItem> other(new TStackItem(triangle));

other->SetNext(head);

head = other;

}

bool TStack::empty() {

return head == nullptr;

}

std::shared_ptr<Triangle> TStack::pop() {

std::shared_ptr<Triangle> result;

if (head!= nullptr) {

result = head->GetTriangle();

head = head->GetNext();

}

return result;

}

TStack::~TStack() {

}

Листинг файла TStackItem. h

#ifndef TSTACKITEM_H

#define TSTACKITEM_H

#include <memory>

#include "Triangle. h"

class TStackItem {

public:

TStackItem(const std::shared_ptr<Triangle>& triangle);

friend std::ostream& operator<<(std::ostream& os, const TStackItem& obj);

std::shared_ptr<TStackItem> SetNext(std::shared_ptr<TStackItem> &next);

std::shared_ptr<TStackItem> GetNext();

std::shared_ptr<Triangle> GetTriangle() const;

virtual ~TStackItem();

private:

std::shared_ptr<Triangle> triangle;

std::shared_ptr<TStackItem> next;

};

#endif /* TSTACKITEM_H */

Листинг файла TStackItem. cpp

#include "TStackItem. h"

#include <iostream>

TStackItem::TStackItem(const std::shared_ptr<Triangle>& triangle) {

this->triangle = triangle;

this->next = nullptr;

std::cout << "Stack item: created" << std::endl;

}

std::shared_ptr<TStackItem> TStackItem::SetNext(std::shared_ptr<TStackItem> &next) {

std::shared_ptr<TStackItem> old = this->next;

this->next = next;

return old;

}

std::shared_ptr<Triangle> TStackItem::GetTriangle() const {

return this->triangle;

}

std::shared_ptr<TStackItem> TStackItem::GetNext() {

return this->next;

}

TStackItem::~TStackItem() {

std::cout << "Stack item: deleted" << std::endl;

}

std::ostream& operator<<(std::ostream& os, const TStackItem& obj) {

os << "[" << *obj. triangle << "]" << std::endl;

return os;

}

Листинг файла Triangle. h

#ifndef TRIANGLE_H

#define TRIANGLE_H

#include <cstdlib>

#include <iostream>

class Triangle {

public:

Triangle();

Triangle(size_t i, size_t j, size_t k);

Triangle(const Triangle& orig);

friend std::ostream& operator<<(std::ostream& os, const Triangle& obj);

Triangle& operator=(const Triangle& right);

virtual ~Triangle();

private:

size_t side_a;

size_t side_b;

size_t side_c;

};

#endif /* TRIANGLE_H */

Листинг файла Triangle. cpp

#include "Triangle. h"

#include <iostream>

Triangle::Triangle() : Triangle(0, 0, 0) {

std::cout << "Triangle created: default" << std::endl;

}

Triangle::Triangle(size_t i, size_t j, size_t k) : side_a(i), side_b(j), side_c(k) {

std::cout << "Triangle created: " << side_a << ", " << side_b << ", " << side_c << std::endl;

}

Triangle::Triangle(const Triangle& orig) {

std::cout << "Triangle copy created" << std::endl;

side_a = orig. side_a;

side_b = orig. side_b;

side_c = orig. side_c;

}

Triangle& Triangle::operator=(const Triangle& right) {

if (this == &right) return *this;

std::cout << "Triangle copied" << std::endl;

side_a = right. side_a;

side_b = right. side_b;

side_c = right. side_c;

return *this;

}

Triangle::~Triangle() {

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020

А ты боишься COVID-19?

 Пройди опрос и получи промокод