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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2011, 22:31   #1
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию Шаблоны

Вот тут в начале создаю шаблон
Код:
#include "stdafx.h"
#include"iostream"
using namespace std;

template<class T>
void sw(&T){
	for(int i=0;i<(int)(sizeof(T)/(2*sizeof(T[0])));i++)
		swap(T[i],T[i+1]);
	}
class massiv{
public:
	massiv(){}
	~massiv(){
		if(i!=NULL) delete [] i;
		else if(li!=NULL) delete [] li;
		else if(f!=NULL) delete [] f;
		else if(d!=NULL) delete [] d;
		else if(ld!=NULL) delete [] ld;
		else if(b!=NULL) delete [] b;
		else if(c!=NULL) delete [] c;
	}
	    char*symbol(int i){
	switch(i){
		case 1:{
			return "int";
			break;
			   }
		case  2:{
			return "long int";
			break;
			   }
		 case 3:{
			return "float";
			break;
			   }
		 case 4:{
			return "double";
			break;
			   }
		case 5:{
			return "long double";
			break;
			   }
		case 6:{
			return "bool";
			break;
			   }
		case 7:{
			return "char";
			break;
			   }
}}
		void initialize(int h){
	switch(i){
		case 1:{
			i=new int[hh];
			for(int ii=0;i<hh;i++)
				cin>>i[ii];
			break;
			   }
		case  2:{
			li=new long int[hh];
			for(int ii=0;i<hh;i++)
				cin>>li[ii];
			break;
			   }
		 case 3:{
			f=new float[hh];
			for(int ii=0;i<hh;i++)
				cin>>f[ii];
			break;
			   }
		 case 4:{
			d=new double[hh];
			for(int ii=0;i<hh;i++)
				cin>>d[ii];
			break;
			   }
		case 5:{
			ld=new long double[hh];
			for(int ii=0;i<hh;i++)
				cin>>ld[ii];
			break;
			   }
		case 6:{
			b=new bool[hh];
			for(int ii=0;i<hh;i++)
				cin>>b[ii];
			break;
			   }
		case 7:{
			c=new char[hh];
			for(int ii=0;i<hh;i++)
				cin>>c[ii];
			break;
			   }
	}}

        void enter(){
	    cout<<"Выберите тип данных из которых будет состоять массив"<<endl;
		cout<<"1 int"<<endl<<"2 long int"<<endl<<"3 float"<<endl<<"4 double"<<endl<<"5 long double"<<endl<<"6 bool"<<endl<<"7 char"<<endl;
	    cin>>h;
		cout<<"Вы выбрали "<<symbol(h)<<endl<<endl;
		cout<<"Из скольки элементов будет состоять массив ?"<<endl;
		cin>>hh;
		cout<<"Введите массив " <<symbol(h)<<" из "<<hh<<" элементов"<<endl;
		initialize(h);
		}
		void out(){
			for(int ii=0;ii<hh;ii++)
				if(i!=NULL) cout<<i[ii]<<" ";
		else if(li!=NULL) cout<<li[ii]<<" ";
		else if(f!=NULL) cout<<f[ii]<<" ";
		else if(d!=NULL) cout<<d[ii]<<" ";
		else if(ld!=NULL) cout<<ld[ii]<<" ";
		else if(b!=NULL) cout<<b[ii]<<" ";
		else if(c!=NULL) cout<<c[ii]<<" ";
		cout<<endl;
		}
		void s(){switch(i){
		case 1:{
			sw(i);
			break;
			   }
		case  2:{
			sw(li);
			break;
			   }
		 case 3:{
			sw(f);
			break;
			   }
		 case 4:{
			sw(d);
			break;
			   }
		case 5:{
			sw(ld);
			break;
			   }
		case 6:{
			sw(b);
			break;
			   }
		case 7:{
			sw(c);
			break;
			   }
}
			
				
		}

private:
	int hh,h;
	int*i;
	long int*li;
	float*f;
	double*d;
	long double*ld;
	bool*b;
	char*c;
		};

int main()
{
   setlocale(LC_ALL,"russian");
   bool not_exit=1;
   
   while(not_exit){
	   cout<<"1 Ввести массив "<<endl<<"2 Выход"<<endl;
	   int u=0;
	   cin>>u;
	   switch(u){
	   case 1:{
		   massiv b;
		   b.enter();
		   b.s();
		   cout<<"Обработанный массив :"<<endl;
		   b.out();
		   system("pause");
           break;
			  }
	   case 2:{
		   not_exit=0;
		   break;
			  }
	   }
   }
    return 0;
}
А вот тут компилятору много кое что не нравится
Код:
1>------ Build started: Project: laba7, Configuration: Debug Win32 ------
1>  laba7.cpp
1>laba7.cpp(8): error C2275: 'T' : illegal use of this type as an expression
1>laba7.cpp(8): error C2275: 'T' : illegal use of this type as an expression
1>laba7.cpp(11): error C2182: 'sw' : illegal use of type 'void'
1>laba7.cpp(11): error C2998: 'int sw' : cannot be a template definition
1>laba7.cpp(179): error C2065: 'b' : undeclared identifier
1>laba7.cpp(180): error C2065: 'b' : undeclared identifier
1>laba7.cpp(182): error C2065: 'b' : undeclared identifier
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Подскажите может я в синтаксисе шаблона что то напутал ?
И что с объектом b .. я его объявил и класс massiv описал
Jugger вне форума Ответить с цитированием
Старый 20.12.2011, 22:47   #2
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Наверное как-то так
Код:

#include"iostream"
using namespace std;

template<class T>
void sw(T* T1){
	for(int i=0;i<(int)(sizeof(T1)/(2*sizeof(T1[0])));i++)
		swap(T1[i],T1[i+1]);
	}
class massiv{
public:
	massiv(){}
	~massiv(){
		if(i!=NULL) delete [] i;
		else if(li!=NULL) delete [] li;
		else if(f!=NULL) delete [] f;
		else if(d!=NULL) delete [] d;
		else if(ld!=NULL) delete [] ld;
		else if(b!=NULL) delete [] b;
		else if(c!=NULL) delete [] c;
	}
	    char*symbol(int i){
	switch(i){
		case 1:{
			return "int";
			break;
			   }
		case  2:{
			return "long int";
			break;
			   }
		 case 3:{
			return "float";
			break;
			   }
		 case 4:{
			return "double";
			break;
			   }
		case 5:{
			return "long double";
			break;
			   }
		case 6:{
			return "bool";
			break;
			   }
		case 7:{
			return "char";
			break;
			   }
}}
		void initialize(int h){
	switch(*i){
		case 1:{
			i=new int[hh];
			for(int ii=0;*i<hh;i++)
				cin>>i[ii];
			break;
			   }
		case  2:{
			li=new long int[hh];
			for(int ii=0;*i<hh;i++)
				cin>>li[ii];
			break;
			   }
		 case 3:{
			f=new float[hh];
			for(int ii=0;*i<hh;i++)
				cin>>f[ii];
			break;
			   }
		 case 4:{
			d=new double[hh];
			for(int ii=0;*i<hh;i++)
				cin>>d[ii];
			break;
			   }
		case 5:{
			ld=new long double[hh];
			for(int ii=0;*i<hh;i++)
				cin>>ld[ii];
			break;
			   }
		case 6:{
			b=new bool[hh];
			for(int ii=0;*i<hh;i++)
				cin>>b[ii];
			break;
			   }
		case 7:{
			c=new char[hh];
			for(int ii=0;*i<hh;i++)
				cin>>c[ii];
			break;
			   }
	}}

        void enter(){
	    cout<<"Выберите тип данных из которых будет состоять массив"<<endl;
		cout<<"1 int"<<endl<<"2 long int"<<endl<<"3 float"<<endl<<"4 double"<<endl<<"5 long double"<<endl<<"6 bool"<<endl<<"7 char"<<endl;
	    cin>>h;
		cout<<"Вы выбрали "<<symbol(h)<<endl<<endl;
		cout<<"Из скольки элементов будет состоять массив ?"<<endl;
		cin>>hh;
		cout<<"Введите массив " <<symbol(h)<<" из "<<hh<<" элементов"<<endl;
		initialize(h);
		}
		void out(){
			for(int ii=0;ii<hh;ii++)
				if(i!=NULL) cout<<i[ii]<<" ";
		else if(li!=NULL) cout<<li[ii]<<" ";
		else if(f!=NULL) cout<<f[ii]<<" ";
		else if(d!=NULL) cout<<d[ii]<<" ";
		else if(ld!=NULL) cout<<ld[ii]<<" ";
		else if(b!=NULL) cout<<b[ii]<<" ";
		else if(c!=NULL) cout<<c[ii]<<" ";
		cout<<endl;
		}
		void s(){
		switch(*i){
		case 1:{
			sw(i);
			break;
			   }
		case  2:{
			sw(li);
			break;
			   }
		 case 3:{
			sw(f);
			break;
			   }
		 case 4:{
			sw(d);
			break;
			   }
		case 5:{
			sw(ld);
			break;
			   }
		case 6:{
			sw(b);
			break;
			   }
		case 7:{
			sw(c);
			break;
			   }
}
			
				
		}

private:
	int hh,h;
	int*i;
	long int*li;
	float*f;
	double*d;
	long double*ld;
	bool*b;
	char*c;
		};

int main()
{
   setlocale(LC_ALL,"russian");
   bool not_exit=1;
   
   while(not_exit){
	   cout<<"1 Ввести массив "<<endl<<"2 Выход"<<endl;
	   int u=0;
	   cin>>u;
	   switch(u){
	   case 1:{
		   massiv b;
		   b.enter();
		   b.s();
		   cout<<"Обработанный массив :"<<endl;
		   b.out();
		   system("pause");
           break;
			  }
	   case 2:{
		   not_exit=0;
		   break;
			  }
	   }
   }
    return 0;
}
И не забудь, что в функцию sw передается указатель на Т. Я исправил в некоторых местах i на *i

Последний раз редактировалось JuniorProger; 20.12.2011 в 23:32.
JuniorProger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблоны Romario92 C++ Builder 2 18.04.2011 19:46
Шаблоны С++ Secc Помощь студентам 4 27.12.2009 17:35
Шаблоны C++ Viamy Помощь студентам 0 27.12.2009 16:10
Шаблоны, Си++ Нataша Помощь студентам 1 11.12.2009 01:35
Шаблоны bondik Общие вопросы C/C++ 10 04.05.2008 09:50