Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2012, 15:31   #1
Rayzor
Пользователь
 
Регистрация: 17.07.2010
Сообщений: 19
По умолчанию Шаблоны класса

Есть класс, который нужно переделать в шаблон. Я сделал вот так:
Код:
#include <iostream>
#include <fstream>



using namespace std;

template <class T>
class complex
{
    public:
    T real;
    T image;

   complex() { this->real = 1; this->image = 1;  };		
   complex(T r, T i) { this->real = r; this->image = i; }	


    double vvod_chisel()
        {
            cout << "Vvedite destvitelnu chast" << endl;
            cin >> this->real;
            cout << "Vvedite mnimu chast" << endl;
            cin >> this->image;
            return this->real, this->image;
        };

    void Sum(T & A, T & B)
    {

         T i, j;
        i=A.real+B.real;
        j=A.image+B.image;
        cout << i << "+i" << j << endl;
    };

     void Razn(T &  A, T & B)
    {
         double i, j;
        i=A.real-B.real;
        j=A.image-B.image;
        cout << i << "+i" << j << endl;
    };

    void Umn (T & A, T & B)
    {
        double i, j;
        i = A.real * B.real - A.image * B.image;
        j = A.real * B.image + B.real * A.image;
        cout << i << "+i" <<j << endl;
    };

    void Delenie(T & A, T & B)
    {
        double k, i, j;
        k = A.real * A.real + A.image * A.image;
        i = (B.real * A.real + B.image * A.image) / k;
        j = (A.real * B.image - B.real * A.image) / k;
        cout << i << "+i" << j << endl;
    };

       ~complex() {
       FILE * fo;
    fo = fopen("com.txt","a");
    fprintf( fo, "%lg", this->real );
    fprintf( fo, "+i %lg\n", this->image );
    fclose(fo);
		};


};

int main()
{
    complex<double> c1;
    complex<double> 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");
    return 0;
}
ну на c1.Sum выводит ошибку. Как функцию переписать чтобы она работала?
Rayzor вне форума Ответить с цитированием
Старый 21.04.2012, 16:06   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Цитата:
ну на c1.Sum выводит ошибку
А что не должен? Вы свой код читали?

У вас есть Sum(double, double), а вы пихаете Sum(complex<double>, complex<double>).
Дальше, в функциях вы подразумеваете, что вам пихают именно ваш класс, а не произвольный Т.

Вывод, либо перегрузить операторы класса правильно, либо переписать ваши функции.
p51x вне форума Ответить с цитированием
Старый 21.04.2012, 16:23   #3
Rayzor
Пользователь
 
Регистрация: 17.07.2010
Сообщений: 19
По умолчанию

так как их переписать? У меня вот так скомпилилось
Код:
void Sum(complex<T> A, complex<T> B) {...} 
....
 complex <double> c1,c2;
 c1.Sum(c1,c2);
И что это шаблон получился? Я что-то никакой разницы не вижу.

Последний раз редактировалось Rayzor; 21.04.2012 в 16:41.
Rayzor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция базового класса вызывает критическую ошибку при вызове для класса-потомка Archet Общие вопросы C/C++ 7 17.01.2012 20:17
Конструктор класса не хочет принимать в качестве параметра адрес объекта другого класса Jugger Помощь студентам 3 05.01.2012 04:10
Определение типа класса по переменной на объект этого класса при компиляции phomm Общие вопросы Delphi 24 08.04.2011 14:11
Шаблоны класса и специализация РагнаР Общие вопросы C/C++ 9 13.03.2011 19:29
Шаблоны - нужно создать объект класса abc в котором вместо aa использовался бы объект класса fff? Farrel Общие вопросы C/C++ 2 13.11.2010 17:37