Форум программистов, компьютерный форум 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++ Вывести строку, удалив предварительно повторяющиеся слова Ввести строку. Вывести её, удалив предварительно повторяющиеся слова. Очень нужна помощь!!! подробнее

Показать сообщение отдельно
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
14.12.2010, 03:22     Создать производный класс ТРОИЧНЫЙ ВЕКТОР от класса Vector
Народ!!! Please help me!
Задолбался уже!
Вобщем такое задание:

Создать производный класс ТРОИЧНЫЙ ВЕКТОР от класса Vector. Компоненты вектора принимают значения из множества {0,1,2}.
Методы:
a) конструктор без параметров;
b) конструктор, принимающий в качестве параметров указатель на массив целого типа и размер вектора;
c) конструктор копирования;
d) деструктор;
e) проверка двух векторов на ортогональность (два троичных вектора называются ортогональными, если в них существует пара одноименных компонент, имеющих в одном из векторов значение 0, а в другом – 1);
f) метод возвращает число компонент в векторе, принимающих значение 2.
Переопределить операции:
a) присваивание (=);
b) поразрядная конъюнкция (пересечение) двух не ортогональных векторов (&): 0&0=0, 1&1=1, 2&2=2, 0&2=0, 2&0=0, 1&2=1, 2&1=1;
c) индексирование ([]).


Вот то, что я сумел накатать:

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
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include <iostream>
using namespace std;
 
class Vector
{
 protected:
  int *mass; // указатель на начало вектора
  int count; // количество элементов в векторе
 public:
  Vector();
  Vector(int i); // конструктор (назначен параметр по умолчанию)
  ~Vector(); // деструтор (не может иметь параметров)
 int item(int i); // возвращает указанный элемент
  void  assign(int i, int x); // назначение элемента
  int num(); // возвращает число элементов (inline)
  int norm(); // возвращает квадрат нормы вектора
};
 
Vector::Vector()
{
}
Vector::Vector(int i)
{ int j;
  count=i;
  int *mass=new int[count];
  for (j=0; j<count; j++) *(mass+j)=0;
  cout << "vector created " << count << "\n";
}
 
Vector::~Vector()
{ delete mass;
 cout << "vector destroyed\n";
}
 
int Vector::item(int i)
{  if ((i>=0) && (i<count)) return *(mass+i);
  else {cout << "Error in vector::item"; return 0;}
}
 
void Vector::assign(int i, int x)
{
  if ((i>=0) && (i<count))  *(mass+i)=x;
  else cout << "Error in vector::assign";
}
int Vector::num() 
      { return count; }
int Vector::norm()
{ int i;
  int x=0;
  for (i=0; i<count; i++) x+=mass[i]*mass[i];
  return x;
}
 
 
class threeVector: public Vector
{
public:
    threeVector();//конструктор без параметрров
    threeVector(int *arr, int n);//передаю указатель на массив и длину массива
    threeVector(int n);//только длину
    ~threeVector();//деструктор
    threeVector(const threeVector &);//конструктор-копировщик
    void OrtVectors(const threeVector &);//проверка на ортогональность
    int SearchKomp(int *mass,int count);// поиск компонента вектора
    
};
threeVector::threeVector():Vector()
{
    int j;
  count=0;
  int *mass=new int[count];
  for (j=0; j<count; j++) *(mass+j)=0;
  cout << "threeVector created " << count << "\n";
}
threeVector::threeVector(int *arr, int n):Vector(n)
{
    *mass=*arr;
     cout << "threeVector created " << count << "\n";
}
threeVector::threeVector(int n):Vector(n)
{
    cout<<"threeVector created "<<count<<"\n";
}
threeVector::~threeVector()
{
    delete mass;
    cout<<"threeVector destroed\n";
}
threeVector::threeVector(const threeVector &rhs) 
{
    int *mass=new int[count];
    *mass=rhs.item(0); //ТУТ ОШИБКА!!!
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
Я понимаю, что жесть. Но может какими-нибудь советами поможете, подскажете чуть-чуть. Просто уже сил нету. Сейчас нахожусь на стадии написания производного класса, а именно конструктора-копировщика. Компилятор выдает следующую ошибку:
(95)error C2662: 'Vector::item' : cannot convert 'this' pointer from 'const threeVector' to 'Vector &'

Я так понимаю, что, пытаясь использовать метод базового класса Item для написания копировщика, в качестве параметра беру ссылку на объект производного класса. Вследствие этого компилятор ругается. Можно ли решить эту проблему "по-быстрому", или надо писать аналог метода Item для производного класса.

Добавлено через 15 часов 36 минут
Ну кто-нибудь посоветуйте что-нибудь - с места сдвинуться не могу! через два дня сдавать

Добавлено через 21 час 30 минут
Кароч, класс я вроде добил. Но уже при написании клиентской части вылезли новые косяки. Ошибка возникает в момент создания объектов. Почему-то после выполнения конструктора пропадает адрес массива, указатель на который является защищенной переменной базового класса. Че я опять не так сделал???
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// Laba7.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include <iostream>
using namespace std;
 
class Vector
{
protected:
  int *mass; // указатель на начало вектора
  int count; // количество элементов в векторе
 public:
  Vector();
  Vector(int i); // конструктор (назначен параметр по умолчанию)
  ~Vector(); // деструтор (не может иметь параметров)
 int item(int i) const; // возвращает указанный элемент
  void  assign(int i, int x); // назначение элемента
  int num(); // возвращает число элементов (inline)
  int norm(); // возвращает квадрат нормы вектора
};
 
Vector::Vector()
{
}
Vector::Vector(int i)
{ int j;
  count=i;
  int *mass=new int[count];
  for (j=0; j<count; j++)
  {
      mass[j]=0;
  }
  cout << "vector created " << count << "\n";
}
 
Vector::~Vector()
{ delete mass;
 cout << "vector destroyed\n";
}
 
int Vector::item(int i) const
{  if ((i>=0) && (i<count)) return *(mass+i);
  else {cout << "Error in vector::item"; return 0;}
}
 
void Vector::assign(int i, int x)
{
  if ((i>=0) && (i<count))  *(mass+i)=x;
  else cout << "Error in vector::assign";
}
int Vector::num() 
      { return count; }
int Vector::norm()
{ int i;
  int x=0;
  for (i=0; i<count; i++) x+=mass[i]*mass[i];
  return x;
}
 
 
class threeVector: public Vector
{
public:
    threeVector();//конструктор без параметрров
    threeVector(int *arr, int n);//передаю указатель на массив и длину массива
    threeVector(int n);//только длину
    ~threeVector();//деструктор
    threeVector(threeVector &);//конструктор-копировщик
    void OrtVectors(threeVector Vec1, threeVector Vec2);//проверка на ортогональность
    int SearchKomp(threeVector Vec1);// поиск компонента вектора
    threeVector & operator=(threeVector &rhs);
    int & operator[](int i);
    threeVector operator*(threeVector &rhs);
    void SetKomp(int x,int i);
};
threeVector::threeVector():Vector()//конструктор
{
    int j;
  count=1;
  int *mass=new int[count];
  for (j=0; j<count; j++) *(mass+j)=0;
  cout << "threeVector created " << count << "\n";
}
threeVector::threeVector(int *arr, int n):Vector(n)//конструктор
{
    *mass=*arr;
     cout << "threeVector created " << count << "\n";
}
threeVector::threeVector(int n):Vector(n)//конструктор
{
    cout<<"threeVector created "<<count<<"\n";
}
threeVector::~threeVector()//деструктор
{
    delete mass;
    cout<<"threeVector destroed\n";
}
threeVector::threeVector(threeVector &rhs) //коструктор-копировщик
{
    int *mass=new int[count];
    *mass=rhs.item(0);
}
void threeVector::OrtVectors(threeVector Vec1, threeVector Vec2)
{
    int i;
    int len;
    if(Vec1.num()<Vec2.num())
    {len=Vec1.num(); }
    else 
    {len=Vec2.num();}
    for(i=0;i<len;i++)
    {
        if(Vec1.item(i)==0 && Vec2.item(i)==1 || Vec1.item(i)==1 && Vec1.item(i)==0) 
        {
            printf("Vectors ortogonal");
            break;
        }
        else
        {
            if(i==len-1) printf("Vetors not ortogonal");
        }
    }
        
}
 
int threeVector::SearchKomp(threeVector Vec1)
{
    int i;
    int len;
    int j;
    j=0;
    len=Vec1.num();
    for(i=0;i<len;i++)
        if(Vec1.item(i)==2) j++;
    return j;
}
threeVector & threeVector::operator=(threeVector & rhs)
{
    if(this==&rhs)
        return *this;
    *mass=rhs.item(0);
    return *this;
}
int & threeVector::operator[](int i)
{
  if ((i>=0) && (i<count)) return mass[i];
  else {cout << "Error in vector::item"; return mass[0];}
}
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;
    }
}
void threeVector::SetKomp(int x,int i)
{
    mass[i]=x;
}
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    threeVector V1(2),V2(2),V3(2);
    int i;
    V1[0]=1;
    V1[1]=0;
    V2[0]=2;
    V2[1]=1;
    V3=V1*V2;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru