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

Наследование между шаблоном и классом - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать функцию поиска строки в форме перегруженной операции индексирования http://www.cyberforum.ru/cpp-beginners/thread610399.html
Для класса mystring {int len; char**str}; написать функцию поиска строки в форме перегруженной операции индексирования . Помогите, пожалуйста!
C++ Обмен первыми половинами двух стеков Помогите, пожалуйста, нужно написать программу обмены первыми половинами двух стеков. http://www.cyberforum.ru/cpp-beginners/thread610395.html
Целевой explicit конструктор C++
Добрый день. Есть код struct Foo { explicit Foo() { }
Генератор случайных чисел C++
составить генератор случайных чисел, имеющий два члена - границы последовательности. Предоставить метод, который выводит СЧ из диапазона чисел, расположенных между этими членами. Всё это визуализировать.
C++ Подсчет предложений во всех файлах http://www.cyberforum.ru/cpp-beginners/thread610348.html
Помогите доделать программу, задание: Напишите программу, которая открывает текстовый файл-список, содержащий имена файлов по одному на строке. Программа подсчитывает количество предложений во всех файлах и выводит на экран случайно выбранное предложение. Сам я сделал первую часть, а именно, файл-список открывается и подсчитывается кол-во предложений, но вот со второй частью беда. Есть идея,...
C++ Что будет выведено на экран при выполнении следующей программы Что будет выведено на экран при выполнении следующей программы при n = 196, m = 649, k = 255 ? #include <stdio.h> #include <stdlib.h> #include <iostream.h> class Data{ protected: int m; public: Data(int m){ this->m = m;} void print(){ подробнее

Показать сообщение отдельно
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
20.06.2012, 19:40     Наследование между шаблоном и классом
Очень простоя идея
1. Я хочу реализовать наследование между тимплейтом ARRAY и классом PointArray
2. Тимплеей ARRAY родитель
3. PointArray соответственно деривативный класс
4. Класс наследует все и всем реализуется тольео функция Length()
5. Length() Функция должна вычислять сумарное расстояние между всеми точками массива из класса PointArray
Моя проблема заключается в следующих моментах
1. Существуют кое какие проблемы связанные с доступам к данным класса Point для функции Length()
2. Я так же не уверен правильно ли я реализовал алгоритм функции Length()


compile error:
1>------ Build started: Project: HP_4.2.Ex3_Point_Array(concrete_inheritance), Configuration: Release Win32 ------
1> main.cpp
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(70): error C2248: 'Point::m_x' : cannot access protected member declared in class 'Point'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(15) : see declaration of 'Point::m_x'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(13) : see declaration of 'Point'
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(70): error C2248: 'Point::m_x' : cannot access protected member declared in class 'Point'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(15) : see declaration of 'Point::m_x'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(13) : see declaration of 'Point'
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(70): error C2248: 'Point::m_y' : cannot access protected member declared in class 'Point'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(16) : see declaration of 'Point::m_y'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(13) : see declaration of 'Point'
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(70): error C2248: 'Point::m_y' : cannot access protected member declared in class 'Point'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(16) : see declaration of 'Point::m_y'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(13) : see declaration of 'Point'
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(70): error C2248: 'Point::m_x' : cannot access protected member declared in class 'Point'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(15) : see declaration of 'Point::m_x'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(13) : see declaration of 'Point'
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(70): error C2248: 'Point::m_x' : cannot access protected member declared in class 'Point'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(15) : see declaration of 'Point::m_x'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(13) : see declaration of 'Point'
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(70): error C2248: 'Point::m_y' : cannot access protected member declared in class 'Point'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(16) : see declaration of 'Point::m_y'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(13) : see declaration of 'Point'
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(70): error C2248: 'Point::m_y' : cannot access protected member declared in class 'Point'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(16) : see declaration of 'Point::m_y'
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\point.h(13) : see declaration of 'Point'
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(72): error C2065: 'Result' : undeclared identifier
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
//array.h 
 
#ifndef ARRAY_H
#define ARRAY_H
 
template <class Type> 
class Array
 
{
protected:
  int m_size;
  Type* m_data; //m_data should be a pointer, since you want to allocate data to it
 
public:
  Array();
  Array(int new_size);
  virtual ~Array(); //Are there reason making destructor virtual?
  Array<Type>& operator=(const Array& ar); //Const correctness here.
  Type& operator [] (int index);
  const Type& operator [] (int index) const;
  int Size() const;
};
 
#ifndef ARRAY_CPP 
#include "array.cpp"
#endif //Array_CPP
 
#endif //Array_H
 
 
 
// Array.cpp
 
 
#ifndef Array_CPP
#define Array_CPP
 
#include "Array.h"
#include <sstream>
#include <iostream>
//#include <exception>
using namespace std;
template <class Type>
Array<Type>::Array() : m_size(10), m_data(0) // 
{
}
template <class Type>
Array<Type>::Array(int size) : m_size(size), m_data(new Type[size])
{ 
}
 
template <class Type>
Array<Type>::~Array()
{
  //Technically, the if is not necessary
  if(m_data)
  {
    delete[] m_data;
    m_data = 0;
  }
 
  //Not necessary either, but just to be clean
  m_size = 0;
}
template <class Type>
Array<Type>& Array<Type>::operator=(const Array& ar)
{
  //Check self assign:
  if(this == &ar) {return *this;}
  Array<Type> copy(ar); //Create a copy of ar; If this fails, then *this will not be changed, and nothing will leak
  //Succeeded creating copy. Now we can put it inside this
  this->Swap(copy); //And then swap the copy into this!
  return *this;
}
 
template <class Type> 
Type& Array<Type>::operator [] (int index) 
{
    if (index > this->m_size)
    {
        cout << "i am hreeeee" << endl;
        return this->m_data[0];
    }
    return m_data[index];
}
 
template <class Type> 
 const Type& Array<Type>::operator [] (int index) const
 {
    if (index > this->m_size)
    {
        cout << "i am hreeeee" << endl;
        return this->m_data[0];
    }
    return m_data[index];
}
 
template<class Type>
int Array<Type>::Size() const
{
    return this->m_size; 
}
 
 
 
 #endif //Array_CPP
 
 
 
 
 
 
// PointArray1.h
#ifndef POINTARRAY1_H
#define POINTARRAY1_H
 
#include "array.h"
#include <math.h>
 
template <class Point> 
class PointArray: public Array<Point>
 
{
    public: 
        PointArray();
        PointArray(int new_size);
       ~PointArray(); 
        PointArray<Point>& operator=(const PointArray<Point>& ar); 
        PointArray<Point> operator *(double factor) const;   
        double Lenght() ;
};
 
template <class Point>
PointArray<Point>::PointArray(): m_size(10), m_data(0) // default filling of array is zeros!
{
}
 
template <class Point>
PointArray<Point>::PointArray(int new_size) : Array<Point>( new_size)//: m_size(new_size), m_data(new Type[new_size])
{ 
}
 
template <class Point>
PointArray<Point>& PointArray<Point>::operator=(const PointArray<Point>& ar) 
{
     Array<Point>::operator = (ar);  // call base class assignment operator
     return *this;
}
 
template <class Point>
PointArray<Point>::~PointArray()
{
  //Technically, the if is not necessary
  if(m_data)
  {
    delete[] m_data;
    m_data = 0;
  }
  //Not necessary either, but just to be clean
  m_size = 0;
}
 
template<class Point>
PointArray<Point> PointArray<Point>::operator *(double factor) const
{
   NumericArray<Point> output(Array<Point>::Size());
   for(int i=0; i<Array::Size(); i++)
   {
      output[i] = (*this)[i] * factor;
      //return output;
   }
   return output;
}
 
double PointArray<Point>::Lenght() 
{
    PointArray<Point> answ1;
    for(int i=0; i+1<answ1.m_size; i++)
    {
        double Result =+ (answ1[i+1].m_x * answ1[i+1].m_x + answ1[i+1].m_y * answ1[i+1].m_y) - (answ1[i].m_x * answ1[i].m_x + answ1[i].m_y * answ1[i].m_y);
    }
    return sqrt(Result);
}
 
#endif //PointArray1_h 
 
 
 
 
// Point.h
#ifndef POINT_H
#define POINT_H
 
#include "array.h"
#include <sstream>
#include <iostream>
 
using namespace std;
class Point
{
protected:
    double m_x;                                
    double m_y;                                
public:
    // Constructors
    Point(): m_x(0), m_y(0) {};                            
    Point(double new_x, double new_y) : m_x(new_x), m_y(new_y) {};
    friend ostream& operator << (ostream& os, const Point& point)
{
    return os << point.ToString();
}
   string ToString() const
{
 
      std::ostringstream os; 
    os << m_x << " , " << m_y; // creating a string like: “Point(1.5, 3.9)”
    std::string double_string = os.str();
 
    return "Point(" + double_string + ")";
 
}
    Point operator *(double factor) const;   
    Point operator * (Point& ar) const;
    Point& operator *=(double factor);
};
 
#endif //Point_h
 
 
// Point.cpp 
 
#include "Point.h"
#include <sstream>
#include <iostream>
using namespace std;
 
  Point Point::operator * (double factor) const
{
    return Point(m_x * factor, m_y * factor);
}
    Point& Point::operator *= (double factor)
        {
    Point tmp = (*this) * factor;
    *this = tmp;
    return *this;
        }
 
      Point Point::operator * (Point& ar) const
{
    return Point(m_x * ar.m_x, m_y * ar.m_y);
}
 
 
//main.cpp
 
        #include "point.h"
    //  #include "Array.h"
        #include "array.cpp"
        #include <exception>
        #include "PointArray1.h"
        #include <iostream>
 
        using namespace std;
int main()
{
             
    PointArray<Point> pArray1(5);
    
    
    for(int i=0; i<pArray1.Size(); i++) 
        pArray1[i] = Point(2*i, 2*i);
 
    
 
        PointArray<Point> answ1 = pArray1 * 3;
    
    for(int i=0; i<answ1.Size(); i++)
    {
        cout << answ1[i] << endl;
        
    }
 
    answ1.Lenght();
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru