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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a,b]. http://www.cyberforum.ru/cpp-beginners/thread209062.html
| Исходные данные - n вещественных величин. || При написании программы используйте динамические массивы. 1. Найти максимальный элеметн массива. 2. Найти сумму элементов массива, ...
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={ ...
C++ обработка структурных данных (статический список). срочно http://www.cyberforum.ru/cpp-beginners/thread209042.html
(Ввод с клавиатуры). Список участков предприятия с разбивкой по цехам. Количества цехов и участков каждого цеха переменны. Для фрагмента модели, являющегося одномерным списком, составить модуль...
C++ Вывести строку, удалив предварительно повторяющиеся слова Ввести строку. Вывести её, удалив предварительно повторяющиеся слова. Очень нужна помощь!!! подробнее

Показать сообщение отдельно
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
14.12.2010, 04:13
Много чего не так.
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;
        }
};
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru