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

Создать производный класс ТРОИЧНЫЙ ВЕКТОР от класса Vector - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a,b]. http://www.cyberforum.ru/cpp-beginners/thread209062.html
| Исходные данные - n вещественных величин. || При написании программы используйте динамические массивы. 1. Найти максимальный элеметн массива. 2. Найти сумму элементов массива, расположенных до последнего положительного элемента. 3. Сжать массив, удалив из него все элементы, модуль которых находится в интервале . Освободившиеся в конце массива элементы заполнить нулями. ...
C++ Необходимо написать программу, которая рандомно задает значения чисел и записывает их в файл Здравствуйте! Помогите, пожалуйста. Необходимо написать программу на С++, которая рандомно задает значения пяти чисел от 0 до 100 и записывает их в текстовый файл http://www.cyberforum.ru/cpp-beginners/thread209057.html
C++ Write memory strings
Привет форумчане :) я пользуюсь C++ Builder 6 я вот тут не могу разобраться HANDLE pHandle; HWND wnd; wnd = FindWindow(0,"TITLE"); DWORD pid;
C++ Гамильтонов цикл
Дали задание сделать программу вычисляющюю гамильтонов цикл. У меня уже бошка шири плеч, не как не получается, вот мои наброски, помогите плиз #include "stdio.h" #define n 8 int r={0}; int a={ {0,0,0,1,0,1,0,0}, {1,0,0,1,1,0,0,0}, {0,1,0,0,0,0,0,0}, {0,0,0,0,0,1,0,1},
C++ обработка структурных данных (статический список). срочно http://www.cyberforum.ru/cpp-beginners/thread209042.html
(Ввод с клавиатуры). Список участков предприятия с разбивкой по цехам. Количества цехов и участков каждого цеха переменны. Для фрагмента модели, являющегося одномерным списком, составить модуль поиска участка с максимальным номером. буду очень признательна! Добавлено через 6 часов 6 минут <<BUMP>>
C++ Вывести строку, удалив предварительно повторяющиеся слова Ввести строку. Вывести её, удалив предварительно повторяющиеся слова. Очень нужна помощь!!! подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
14.12.2010, 04:13     Создать производный класс ТРОИЧНЫЙ ВЕКТОР от класса Vector
Много чего не так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
Vector::Vector(int i)
{ int j;
  count=i;
  int *mass=new int[count]; // объявляете(!) новую(!) переменную 
                                      // mass, перекрывающую поле класса
                                      // ничего не инициализируется.
  for (j=0; j<count; j++)
  {
          mass[j]=0;
  }
  cout << "vector created " << count << "\n";
}
C++
1
2
3
4
5
threeVector::threeVector(threeVector &rhs) //коструктор-копировщик
{
        int *mass=new int[count]; // то же самое.
        *mass=rhs.item(0);  // только один элемент будет скопирован
}
C++
1
2
3
4
5
6
7
8
9
10
11
threeVector threeVector::operator*(threeVector &rhs)
{
        int i;
        threeVector Vec(count);
        for(i=0;i<count;i++)
        {
                if(mass[i]<=rhs.item(i)) Vec.SetKomp(mass[i],i);
                else Vec.SetKomp(rhs.item(i),i);
                return Vec;  // возвратит значение после первого же прохода цикла
        }
}
Чтобы вот это сработало,
C++
1
V3=V1*V2;
нужен еще оператор присваивания. Не забудьте проверить, что не присваиваете самого себя!

C++
1
2
3
4
5
threeVector::threeVector(int *arr, int n):Vector(n)//конструктор
{
        *mass=*arr; // копируете только один, самый первый интеджер?!
         cout << "threeVector created " << count << "\n";
}


Посмотрите вот такой пример. Это хоть и шаблон класса, много лишних для вас методов, но тут есть примеры конструкторов, операторов, деструкторов.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <iostream>
 
using namespace std;
 
template <class _Tp>
class Vector
{
public:
        typedef _Tp value_type;
        typedef value_type* pointer;
protected:
        pointer* _data_start;
        pointer* _data_finish;
        pointer* _data_end_of_storage;
 
        void quickSort(int left, int right, bool (*compare)(const _Tp&, const _Tp&))
        {
                int i = left, j = right;
                value_type pivot = at((left + right) / 2);
 
                /* partition */
                while (i <= j)
                {
                        while (compare(at(i), pivot))
                                i++;
                        while (compare(pivot, at(j)))
                                j--;
                        if (i <= j)
                        {
                                pointer tmp = _data_start[i];
                                _data_start[i] = _data_start[j];
                                _data_start[j] = tmp;
                                i++;
                                j--;
                        }
                };
 
                /* recursion */
                if (left < j)
                        quickSort(left, j, compare);
                if (i < right)
                        quickSort(i, right, compare);
}
 
 
 
public:
        Vector(int n, unsigned int max_capacity = 0) : _data_start(0), _data_finish(0), _data_end_of_storage(0)
        {
                if (n > max_capacity)
                        max_capacity = n+1;
                _data_start = new pointer[max_capacity];
                _data_finish = _data_start + n;
                _data_end_of_storage =_data_start + max_capacity;
 
                for (int i = 0; i<size(); i++)
                        _data_start[i] = new value_type;
        }
        Vector(void) : _data_start(new pointer[1]), _data_finish(_data_start), _data_end_of_storage(_data_start+1) {}
        Vector(const Vector<_Tp>& other)
        {
                _data_start = new pointer[other.capacity()];
                _data_finish = _data_start + other.size();
                _data_end_of_storage =_data_start + other.capacity();
 
                for (int i = 0; i<size(); i++)
                        _data_start[i] = new value_type(other[i]);
        }
 
        value_type& push_back(const value_type value)
        {
                if (!(_data_finish < _data_end_of_storage))
                        reserve(capacity()+2);
                *_data_finish = new value_type(value);
                _data_finish++;
        }
 
        void sort(bool (*compare)(const _Tp&, const _Tp&))
        {
                quickSort(0, size()-1, compare);
        }
 
        void reserve(int new_capacity)
        {
                pointer* _new_data_start = new pointer[new_capacity];
                int new_size = (size()>new_capacity)?new_capacity:size();
 
                for (int i = 0; i<new_size; i++)
                        _new_data_start[i] = _data_start[i];
 
                delete [] _data_start;
 
                _data_start = _new_data_start;
                _data_finish = _data_start + new_size;
                _data_end_of_storage = _new_data_start + new_capacity;
        }
 
        Vector<_Tp> operator= (const Vector<_Tp>& other)
        {
                if (this!=&other)
                {
                        if (_data_start!=0)
                                delete _data_start;
                        _data_start = new pointer[other.capacity()];
                        _data_finish = _data_start + other.size();
                        _data_end_of_storage =_data_start + other.capacity();
 
                        for (int i = 0; i<size(); i++)
                                _data_start[i] = new value_type(other[i]);
                }
                return *this;
        }
 
        value_type& operator[](unsigned int n) const { return *(_data_start[n]); }
        value_type& operator[](unsigned int n) { return *(_data_start[n]); }
 
        value_type& at(int n) const { return *(_data_start[n]); }
        value_type& at(int n) { return *(_data_start[n]); }
 
        unsigned int size() const { return (_data_finish - _data_start); }
        unsigned int capacity() const { return (_data_end_of_storage - _data_start); }
 
        ~Vector()
        {
                for (int i=0; i<size(); i++)
                        delete _data_start[i];
                delete [] _data_start;
        }
};
 
Текущее время: 15:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru