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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 21:02   #1
iKarma
Кипучий чайник
Пользователь
 
Регистрация: 17.10.2011
Сообщений: 55
По умолчанию Шаблоны классов и функций

Всем доброго времени суток =) Мне нужно создать класс для работы с целыми числами. Используя шаблоны, выполнить тоже задание для вещественных чисел. А само задание звучит так: если в последовательности N целых чисел есть хотя бы один член меньше 10, то все отрицательные числа заменить их квадратами, а в противном случае - домножить все члены на 2. Вот мой код:
Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

template <class AgrType>
class Numbers {
private:
   AgrType *Source; //Исходный массив
   AgrType *Final; //Массив дополнений
   int Size; //Размерность массивов
public:
   Numbers(int N); //Конструктор
   ~Numbers(); //Деструктор
   void NumberAdd(AgrType elem, int index); //Функция добавления элементов
   AgrType Min() const; //Функция поиска минимального элемента
   void Change(); //Функция замены отрицательных чисел на их квадраты
   void Multiply(); //Функция умножения всех членов на 2*
   void MethodChoice(); //Функция выбора метода обработки
   void Print() const; //Функция вывода на экран
};

template <class AgrType>
Numbers <AgrType> :: Numbers(int N)
{
   Size = N;
   Source = new AgrType[N];
   if (Source == NULL)
   {
        cout << "ERROR!\n" ;
        cout << "Press Anykey to Exit" ;
        getch();
        exit(1);
   };
   Final = new AgrType[N];
   if (Final == NULL)
   {
        cout << "ERROR!\n" ;
        cout << "Press Anykey to Exit" ;
        getch();
        exit(1);
   };
}

template <class AgrType>
Numbers <AgrType> :: ~Numbers()
{
    delete[] Source;
    delete[] Final;
};

template <class AgrType>
void Numbers <AgrType> :: NumberAdd(AgrType elem, int index)
{
   Source[index] = elem;
};

template <class AgrType>
AgrType Numbers <AgrType> :: Min() const
{
    AgrType min = 0;
	int imin = 0;
	min = Source[0];
    for (int i = 0; i < Size; i++) {
		if (Source[i] < min) {
			min = Source[i];
			imin = i;
		}
	}
    return min;
};

template <class AgrType>
void Numbers <AgrType> :: Change()
{
	for (int i = 0; i < Size; i++)
	{
		if (Source[i] < 0) 
			Final[i] = Source[i] * Source[i];
	};
}

template <class AgrType>
void Numbers <AgrType> :: Multiply()
{
	for (int i = 0; i < Size; i++)
	{
		Final[i] = Source[i] * 2;
	};
}

template <class AgrType>
void Numbers <AgrType> :: MethodChoice()
{
	AgrType min;
    min = Min();;
    if (min < 10)
		Change();
	else 
		Multiply();
}

template <class AgrType>
void Numbers <AgrType> :: Print() const
{
   cout << "Source:\n";
   for (int i = 0; i < Size; i++)
      cout << Source[i] << " ";
   cout << "\nFinal:\n";
   for (int i = 0; i < Size; i++)
      cout << Final[i] << " ";
};

void main()
{
   int n, i_elem;
   float f_elem;
   char choice;

   cout << "Do u wanna work with Integer (I) or Float (F) numbers? ";
   cin >> choice;

   switch (choice)
   {
      case 'I':
      case 'i':
      {
          cout << "Array of Integer:\n" ;
          cout << "Input dimension of array: " ;
          cin >> n ;
          Numbers <int> intN(n);
          for (int i = 0; i < n; i++)
          {
              cout << "[" << i+1 << "]=";
              cin >> i_elem ;
              intN.NumberAdd(i_elem, i);
          };
          intN.MethodChoice();
          intN.Print();
          break;
      };
      case 'F':
      case 'f':
      {
          cout << "Array of Float\n" ;
          cout << "Input dimension of array: " ;
          cin >> n ;
          Numbers <float> flN(n);
          for (int i = 0; i < n; i++)
          {
              cout << "[" << i+1 << "]=" ;
              cin >> f_elem ;
              flN.NumberAdd(f_elem, i);
          };
          flN.MethodChoice();
          flN.Print();
          break;
      };
   };

   cout << "\nPress Anykey to Exit" ;
   getch();
};
Вроде всё правильно с шаблонами реализовал, но почему-то не работает обработка, как мне кажется функция void MethodChoice(); не работает, здесь ли ошибка?
iKarma вне форума Ответить с цитированием
Старый 07.05.2012, 12:05   #2
Borkot
Пользователь
 
Аватар для Borkot
 
Регистрация: 29.04.2012
Сообщений: 37
По умолчанию

Я больше с вопросом...
Код:
Numbers <AgrType> :: Numbers(int N)
Я так понимаю это одна переменная помещается в другую.Правильно?Что значит это выражение?Заранее спасибо!

Последний раз редактировалось Borkot; 07.05.2012 в 12:07. Причина: Уточнение
Borkot вне форума Ответить с цитированием
Старый 07.05.2012, 15:25   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Я так понимаю это одна переменная помещается в другую.
Ну где это видно?

Конструктор шаблона класса с одним параметром типа инт все.
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И опять шаблоны классов malinoff Помощь студентам 0 09.04.2011 17:47
C++, шаблоны функций и классов DimR Фриланс 9 09.03.2011 15:03
Шаблоны классов __Demon__ C++ Builder 11 03.03.2010 01:04
Шаблоны пользовательских классов MaTBeu Общие вопросы C/C++ 2 23.03.2008 19:02