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

наследник шаблонного класса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Rayzor92
14 / 14 / 1
Регистрация: 21.04.2012
Сообщений: 387
02.05.2012, 15:30     наследник шаблонного класса #1
как объявить наследника шаблонного класса, да ещё если он обрамлён собственным пространсвом имён? Вот мой класс:
Код
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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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
Сообщений: 387
02.05.2012, 16:42  [ТС]     наследник шаблонного класса #3
спасибо, а не подскажите ещё как вынести функции из такого наследника. У меня такая функция:
Код
void Sum(MyClass<T> &A, MyClass<T> &B)
{...};
Я в шаблоне оставил
Код
void Sum(MyClass<T> &, MyClass<T> &)
А в не класса делаю так:
Код
void MyClass<T>::Sum(MyClass<T> &A, MyClass<T> &B)
{...};
Но чёт не пашет((
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Сообщений: 387
12.05.2012, 14:17  [ТС]     наследник шаблонного класса #5
спасибо всем за помощь. Щас стал заново писать main к этому классу и
Код
MyClass <double> c1;
уже не работает. Как объявить объект то? Раньше вроде так делал на этом же классе
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.05.2012, 14:21     наследник шаблонного класса #6
Rayzor92, Что значит не работает? Реализация функций описана в .h файле, там же где и сам шаблонный класс?
Rayzor92
14 / 14 / 1
Регистрация: 21.04.2012
Сообщений: 387
12.05.2012, 14:29  [ТС]     наследник шаблонного класса #7
ошибку выводит когда создаю объект. Наследник описан в том же файле что и маин. Единственное вынес родительский класс.

Добавлено через 2 минуты
вот весь код
Код
#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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.05.2012, 14:31     наследник шаблонного класса #8
Rayzor92, Ошибку в студию.
Rayzor92
14 / 14 / 1
Регистрация: 21.04.2012
Сообщений: 387
12.05.2012, 14:33  [ТС]     наследник шаблонного класса #9
100 C:\Dev-Cpp\lab4.cpp no matching function for call to `MyClass<double>::MyClass()'
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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++

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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     наследник шаблонного класса
Ответ Создать тему
Опции темы

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