Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Создать абстрактный тип данных - класс вектор - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Структуры данных(Описать структуру с именем ITINERARY, которая содержит следующие поля) http://www.cyberforum.ru/cpp-beginners/thread730547.html
. Описать структуру с именем ITINERARY, которая содержит следующие поля: • FIRST - название начального пункта маршрута. • FINAL - название конечного пункта маршрута: • NUM - номер маршрута. •...
C++ Ветвление (вычислить U) Программа не запускается, Помогите вычислить U.... На всякий случай скинула блок-схему. И сам текст задачи,для простоты понимания условия. Заранее очень благодарна. http://www.cyberforum.ru/cpp-beginners/thread730541.html
C++ Неясность в условии (Определить количество маскимальных элементов в массиве)
Попалась такая задача: дан двумерный массив. Определить колличество маскимальных элементов в массиве. У кого какие соображения что под этим подразумевается?..
Многомерные массивы (В прямоугольной целочисленной матрицы определить сумму) C++
Помогите сделать программу :) В прямоугольной целочисленной матрицы определить сумму элементов лент содержащие хотя бы один нулевой элемент
C++ Определить не превышает ли общая масса всех предметов грузоподъемность автомобиля (массив) http://www.cyberforum.ru/cpp-beginners/thread730509.html
Помогите решить задачу, очень надо! C++ В массиве хранится информация о массе каждого из 30 предметов, загружаемых в грузовой автомобиль, грузоподъемность которого известна. Определить не...
C++ игра крестики-нолики Доброго времени суток! собственно говоря не знаю как сделать нормально изображения Х и O программа вот #include <allegro.h> BITMAP *xSprite; BITMAP *oSprite; int board = { 0, 0, 0, 0, 0, 0,... подробнее

Показать сообщение отдельно
Виктория 1992
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 5

Создать абстрактный тип данных - класс вектор - C++

13.12.2012, 18:25. Просмотров 1467. Ответов 3
Метки (Все метки)

Создать абстрактный тип данных - класс вектор (динамический массив), который имеет указатель на double, число элементов и переменную состояния. Определить конструктор без параметров, конструктор с параметром,конструктор с двумя параметрами. Конструктор без параметров выделяет место для одного элемента и инициализирует его в ноль. Конструктор с одним параметром, размер вектора, выделяет место и инициализирует номером в массиве, конструктор с двумя параметрами выделяет место (первый аргумент) и инициализирует его вторым аргументом. Деструктор освобождает память. Определить функцию, которая присваивает элементу массива некоторое значение (параметр по умолчанию), функцию, которая получает некоторый элемент массива. В переменную состояния устанавливать код ошибки, когда не хватает памяти, выходит за пределы массива. Определить функцию печати. Определить функцию сложения, умножения, вычитания, которые производят эти арифметические операции с данными этого класса и встроенного double. Определить методы сравнения больше, меньше или равно. Предусмотреть возможность подсчета числа объектов данного типа. Проверить работу этого класса.

Ну как то так получилось, нужно дописать Деструктор освобождающий память.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <vector>
#include <sstream>
 
using namespace std;
 
class vectr {
      private:
              double* a;
              int size;
              enum status { OK, ERR_MEM, ERR_OUT };
              status sts;
      public:
             int sz() { return size; }
             vectr() { a = new double[1]; size=1; }
             vectr(int x) { a = new double[x]; size=x; for(int i=0;i<x;i++) { a[i]=i; } }
             vectr(int x, double z) { a = new double[x]; size=x; for(int i=0;i<x;i++) { a[i]=z; } }
             int destr() { a = new double[0]; sts=OK; }
             int set(int x, double z) { if(x<size) { sts=OK; a[x]=z; return 0; } else { sts=ERR_OUT; return 0;} }
             double get(int x) { if(x<size) { sts=OK; return a[x]; } else { sts=ERR_OUT; return 0;} }
             string prt() { stringstream ss; for(int i=0;i<size;i++) ss << a[i] << " "; return ss.str();}
             vectr operator+(vectr& r) { if(sz()>=r.sz()) { vectr ot(sz()); for(int i=0;i<r.sz();i++) ot.set(i, ot.get(i)+r.get(i)); return ot; } else { vectr ot(r.sz()); for(int i=0;i<sz();i++) ot.set(i, ot.get(i)+r.get(i)); return ot; } }
             vectr operator*(vectr& r) { if(sz()>=r.sz()) { vectr ot(sz()); for(int i=0;i<r.sz();i++) ot.set(i, ot.get(i)*r.get(i)); return ot; } else { vectr ot(r.sz()); for(int i=0;i<sz();i++) ot.set(i, ot.get(i)*r.get(i)); return ot; } }
             vectr operator-(vectr& r) { if(sz()>=r.sz()) { vectr ot(sz()); for(int i=0;i<r.sz();i++) ot.set(i, ot.get(i)-r.get(i)); return ot; } else { vectr ot(r.sz()); for(int i=0;i<sz();i++) ot.set(i, ot.get(i)-r.get(i)); return ot; } }
             bool operator>(vectr& r) { return sz()>r.sz(); }
             bool operator<(vectr& r) { return sz()<r.sz(); }
             bool operator==(vectr& r) { return sz()==r.sz(); }
};
 
int main() {
    vectr a(4), b(3, 2.2);
    cout << "Vector a:\n" << a.prt() << "\nVector b:\n" << b.prt() << endl;
    cout << "Summa vectorov a + b:\n" << (a+b).prt() << endl;
    cout << "Umnojenie vectorov a * b:\n" << (a*b).prt() << endl;
    cout << "Raznost' vectorov a - b:\n" << (a-b).prt() << endl;
    cout << "Vector a > b (kriterii kol-vo elementov):\n" << (a>b) << endl;
    cout << "Vector a < b (kriterii kol-vo elementov):\n" << (a<b) << endl;
    cout << "Vector a == b (kriterii kol-vo elementov):\n" << (a==b) << endl;
    a.set(0, 3);
    cout << "V vector a[0] zadaem znachenie = 3\n" << a.prt() << endl;
    cout << "Znachenie vectora a[3] = " << a.get(3) << endl;
    system("pause");
}

И вот это задание надо переписать в качестве шаблона с одним аргументом.Аргумент шаблона представляет собой тип содержимого (например тип элементов вектора (int.double и т.п.)). Шаблонный класс позволит снять ограничения по типу содержимого, и в равной степени успешно работать с типом int, float,double и пр. Написать программу, демонстрирующую работу шаблонного класса с аргументом типа int и double.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru