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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Rayzor92
14 / 14 / 1
Регистрация: 21.04.2012
Сообщений: 391
#1

Объявление наследника шаблонного класса - C++

02.05.2012, 15:30. Просмотров 1351. Ответов 10
Метки нет (Все метки)

как объявить наследника шаблонного класса, да ещё если он обрамлён собственным пространсвом имён? Вот мой класс:
C++
1
2
3
4
namespace my_complex {
template <class T>
class complex
{...};};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2012, 15:30     Объявление наследника шаблонного класса
Посмотрите здесь:

Не работает конструктор наследника класса C++
Вывод из класса наследника C++
C++ Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса.
C++ Обявление шаблонного класса
Объявление шаблонного класса C++
C++ Создание Шаблонного класса
C++ Инстанцирование шаблонного класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.05.2012, 16:01     Объявление наследника шаблонного класса #2
Примерно так
C++
1
2
3
4
5
template < class T >
class derived : my_complex::complex< T >
{
    
};
Rayzor92
14 / 14 / 1
Регистрация: 21.04.2012
Сообщений: 391
02.05.2012, 16:42  [ТС]     Объявление наследника шаблонного класса #3
спасибо, а не подскажите ещё как вынести функции из такого наследника. У меня такая функция:
C++
1
2
void Sum(MyClass<T> &A, MyClass<T> &B)
{...};
Я в шаблоне оставил
C++
1
void Sum(MyClass<T> &, MyClass<T> &)
А в не класса делаю так:
C++
1
2
void MyClass<T>::Sum(MyClass<T> &A, MyClass<T> &B)
{...};
Но чёт не пашет((
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
02.05.2012, 16:48     Объявление наследника шаблонного класса #4
C++
1
2
3
4
template<class T>
void MyClass<T>::Sum(MyClass<T>& A, MyClass<T>& B)
{
}
Rayzor92
14 / 14 / 1
Регистрация: 21.04.2012
Сообщений: 391
12.05.2012, 14:17  [ТС]     Объявление наследника шаблонного класса #5
спасибо всем за помощь. Щас стал заново писать main к этому классу и
C++
1
MyClass <double> c1;
уже не работает. Как объявить объект то? Раньше вроде так делал на этом же классе
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
12.05.2012, 14:21     Объявление наследника шаблонного класса #6
Rayzor92, Что значит не работает? Реализация функций описана в .h файле, там же где и сам шаблонный класс?
Rayzor92
14 / 14 / 1
Регистрация: 21.04.2012
Сообщений: 391
12.05.2012, 14:29  [ТС]     Объявление наследника шаблонного класса #7
ошибку выводит когда создаю объект. Наследник описан в том же файле что и маин. Единственное вынес родительский класс.

Добавлено через 2 минуты
вот весь код
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
#include <fstream>
#include <iostream>
#include <math.h>
 
 
using namespace std;
 
 
#include "one_class.cpp"
 
template <class T>
class MyClass: public my_complex::complex<T>
      {
       public:   
    MyClass(T r, T i) { this->real = r; this->image = i; }; //конструктор
 
              const double getReal(); //интер ф-ция, возвращающая Real
              const double getImage(); //интер ф-ция, возвращающая Image
   
              void Sum(MyClass<T> &, MyClass<T> &);   //ф-ция суммы
              void Razn(MyClass<T> &, MyClass<T> &); //ф-ция разности
              
              double abs();   // Модуль комплексного числа
              void formula_Muavra(); //Возведение комплекс. числа в степень     
   
       };
 
template<class T>
const double MyClass<T>::getReal()
    {
    return this->real;       
    };
   
template<class T>
const double MyClass<T>::getImage()
       {
            return this->image;       
       };
 
template<class T>
void MyClass<T>::Sum(MyClass<T> &A, MyClass<T> &B)
{
T i, j;
i=getReal(A)+getReal(B);
j=getImage(A)+getImage(B);
cout << i << "+i" << j << endl;
FILE * fo;
fo = fopen("com.txt","a");
fprintf( fo, "%lg", this->real );
fprintf( fo, "+i %lg\n", this->image );
fclose(fo);
}; 
 
template<class T>
void MyClass<T>::Razn(MyClass<T> &A, MyClass<T> &B)
{
T i, j;
i=getReal(A)-getReal(B);
j=getImage(A)-getImage(B);
cout << i << "+i" << j << endl;
FILE * fo;
fo = fopen("com.txt","a");
fprintf( fo, "%lg", this->real );
fprintf( fo, "+i %lg\n", this->image );
fclose(fo);
};
 
template<class T>
double MyClass<T>::abs()   // Модуль комплексного числа
{
return sqrt(getReal() * getReal() + getImage() * getImage());
}
 
template<class T>
void formula_Muavra() //Возведение комплекс. числа в степень
{
double argument;
double stepen;
cout << "vvedite argument complex chisla";
cin >> argument;
cout << "vvedite stepen complex chisla";
cin >> stepen;
int modul=MyClass<T>::abs();
cout << pow(modul,stepen) << "(cos" << argument*stepen << "+isin" << argument*stepen; 
};      
 
 
using namespace my_complex;
 
int main()
{
    /*complex <double> c1,c2;
    c1.vvod_chisel();
    c2.vvod_chisel();
   c1.Sum(c1,c2);
    c1.Razn(c1,c2);
      c1.Umn(c1,c2);
      c1.Delenie(c1,c2);
      system ("pause");*/
      MyClass <double> c1;
      c1.vvod_chisel();
    return 0;
}
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
12.05.2012, 14:31     Объявление наследника шаблонного класса #8
Rayzor92, Ошибку в студию.
Rayzor92
14 / 14 / 1
Регистрация: 21.04.2012
Сообщений: 391
12.05.2012, 14:33  [ТС]     Объявление наследника шаблонного класса #9
100 C:\Dev-Cpp\lab4.cpp no matching function for call to `MyClass<double>::MyClass()'
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
12.05.2012, 14:35     Объявление наследника шаблонного класса #10
Rayzor92, Логично. Конструктора без параметров ведь у вас нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2012, 14:37     Объявление наследника шаблонного класса
Еще ссылки по теме:

Конструктор класса наследника C++
C++ Объявление и определение шаблонного класса
Реализация шаблонного класса C++
Вывод переменной из наследника класса C++
Специализация шаблонного класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.05.2012, 14:37     Объявление наследника шаблонного класса #11
Цитата Сообщение от Rayzor92 Посмотреть сообщение
MyClass(T r, T i) { this->real = r; this->image = i; }; //конструктор
Определяется конструктор, конструктор по умолчанию уже не генерируется.
Определите конструктор по умолчанию.
Yandex
Объявления
12.05.2012, 14:37     Объявление наследника шаблонного класса
Ответ Создать тему
Опции темы

Текущее время: 09:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru