Форум программистов, компьютерный форум 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
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
20.06.2012, 20:04  [ТС]     Наследование между шаблоном и классом
Цитата Сообщение от DU Посмотреть сообщение
да. либо делать поля публичными, либо добавить такие вот методы Get и Set, с помощю которых можно изменять координаты. Можно еще объявить такой вот PointArray<Point> другом для класса Point, но это кривой подход. Изменять и получать значения координат наверняка понадобится в других местах. Все насвете сделать друзьями этого поинта не получится.
добавлю еще, что если у вас этот массив заточен под хранение именно Point-ов, то не надо его делать шаблоном. лучше так:
C++
1
2
3
4
class PointArray : public Array<Point>
{
 ...
};
И опять у вас ненужный деструктор и оператор =
Почему не нужный оператор = и деструктор не наследуется же... или типа деструктор не нужен потому что у меня нет динамических объектов ??? а = я не пользуюсь ???

я вообщем поправил с getX ()


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(25): error C2614: 'PointArray<Point>' : illegal member initialization: 'm_data' is not a base or member
1> with



1> [
1> Point=Point
1> ]
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(24) : while compiling class template member function 'PointArray<Point>::PointArray(void)'
1> with
1> [
1> Point=Point
1> ]
1> c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(65) : see reference to class template instantiation 'PointArray<Point>' being compiled
1> with
1> [
1> Point=Point
1> ]
1>c:\all my\с++\ha level 6\solution\level 6\hp_4.2.ex3_point_array(concrete_inheritance)\PointArray1.h(25): error C2614: 'PointArray<Point>' : illegal member initialization: 'm_size' is not a base or member
1> with
1> [
1> Point=Point
1> ]
========== 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
// 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
{
   PointArray<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;
    double  qResult;
    for(int i=0; i+1<answ1.m_size; i++)
    {
        qResult =+ (answ1[i+1].GetX() * answ1[i+1].GetX() + answ1[i+1].GetY() * answ1[i+1].GetY()) - (answ1[i].GetX() * answ1[i].GetX() + answ1[i].GetY() * answ1[i].GetY());
    }
    //double Result;
//   Result = sqrt(qResult);
     return qResult;
}
 
#endif //PointArray1_h 
 
 
//
Добавлено через 3 минуты
Цитата Сообщение от DU Посмотреть сообщение
C++
1
2
3
4
class PointArray : public Array<Point>
{
 ...
};
А как же мне тогда дефолтный конструктор сделать
m_data же у меня Type* ????
PointArray::PointArray(): m_size(10), m_data(0) // default filling of array is zeros!
{
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru