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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Виктория 1992
 Аватар для Виктория 1992
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 5
13.12.2012, 18:25     Создать абстрактный тип данных - класс вектор #1
Создать абстрактный тип данных - класс вектор (динамический массив), который имеет указатель на 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.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2012, 18:25     Создать абстрактный тип данных - класс вектор
Посмотрите здесь:

C++ Создать абстрактный тип данных - класс вектор
Создать абстрактный тип данных (структура) - вектор, который имеет указатель на short и число элементов C++
C++ Создать абстрактный тип данных (структура) - окно
Создать абстрактный тип данных - класс вектор, который имеет указатель на long, число элементов и переменную состояния C++
Создать абстрактный тип данных (структура) - картина, у которой есть название, автор, стоимость C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
13.12.2012, 18:34     Создать абстрактный тип данных - класс вектор #2
Посмотрите в поиске или например здесь Опишите класс "Вектор"
Подобное писалось не единожды
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,411
13.12.2012, 18:50     Создать абстрактный тип данных - класс вектор #3
C++
1
int destr() { a = new double[0]; sts=OK; }
это не деструктор
Не вижу реализации
Конструктор без параметров выделяет место для одного элемента и инициализирует его в ноль. Конструктор с одним параметром, размер вектора, выделяет место и инициализирует номером в массиве, < ... > Деструктор освобождает память.
askurandrio
21 / 54 / 12
Регистрация: 23.03.2015
Сообщений: 219
Завершенные тесты: 1
20.04.2015, 16:48     Создать абстрактный тип данных - класс вектор #4
А ето что?
C++
1
for(int i=0;i<x;i++) { a[i]=z; }
Yandex
Объявления
20.04.2015, 16:48     Создать абстрактный тип данных - класс вектор
Ответ Создать тему
Опции темы

Текущее время: 16:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru