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

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

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

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

02.05.2012, 15:30. Просмотров 1402. Ответов 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++
Добрый вечер, мастера :) Почему данный код вызывает проблемы у компилятора? // class.h template &lt;typename T&gt; class Name { ...

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра? - C++
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); } template &lt;class T&gt; void...

Вызов метода у шаблонного поля, шаблонного класса - C++
Пытаюсь разобраться с шаблонами- задача создать шаблонный класс, у которого есть шаблонное поле. и затем вызывать метод у этого поля. ...

Правда, что указатель класса-наследника не может указывать на объект класса-родителя? - C++
Доброго времени суток! Пример кода ниже. Правда ли , что указатель класса-наследника не может указывать на объект класса-родителя? ...

Возможно ли создание объекта шаблонного класса в функции этого класса? - C++
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон контейнера (множество) с операциями...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
diagon
Higher
1929 / 1195 / 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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
12.05.2012, 14:35 #10
Rayzor92, Логично. Конструктора без параметров ведь у вас нет.
diagon
Higher
1929 / 1195 / 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; }; //конструктор
Определяется конструктор, конструктор по умолчанию уже не генерируется.
Определите конструктор по умолчанию.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2012, 14:37
Привет! Вот еще темы с ответами:

Чем отличается шаблонный метод класса от шаблонного класса? - C++
Чем отличается шаблонный метод класса от шаблонного класса???????ПЛИЗ!!!!Если можно немного ссылок на летературу

Вызов конструктора базового класса из класса-наследника - C++
Можно ли вне списка инициализации вызвать конструктор базового класса ? class A { int a; public: A(int c):a(c){} ...

Вывод из класса наследника - C++
У меня получается вывод из главного класса, а когда вывожу через функцию из класса наследника выдает ошибку, из-за чего так???? хоты вывожу...

Конструктор класса наследника - C++
Я не могу понять свою ошибку к примеру если пишу так все нормально class one { public: one(); };


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.05.2012, 14:37
Ответ Создать тему
Опции темы

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