
22.05.2008, 22:19
|
|
Новичок
Регистрация: 08.02.2008
Сообщений: 12
С нами:
9607368
Репутация:
2
|
|
помогите плз
Описать шаблон контейнерного класса, разработанного в лабораторной работе № 6. Протестировать шаблон для различных типов данных, хранящихся в контейнере. Варианты заданий приведены в табл.
double, структура с полями: шифр книги, авторы, название книги
лаба 6 написанна....вот для нее перегруз...но что то не айс=((
Код:
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <vcl.h>
#include <stdio.h>
#pragma argsused
struct info
{
int RegCode;
char FIO[25];
char name[255];
};
template <class t>
class array
{
private:
int size;
t** a;
int counter;
void SetArray( int );
public:
array( int );
array(array &x);
~array();
void Input(t );
void Output();
void OutputByIndex(int);
void GetSize();
array operator !();
array operator =(array );
void operator [](int );
bool operator ==(array);
};
template <class t>
array<t>::array(int size)
{
SetArray(size);
}
template <class t>
array<t>::array (array &x)
{
size=x.size;
counter = x.counter;
a = new t*[size];
for ( int i=0; i < counter; i++)
{
a[i]= x.a[i];
}
}
template <class t>
array<t>::~array()
{
if (a)
delete []a;
}
//--------------------------------------------
template <class t>
void array<t>::SetArray(int siz)
{
a = new t*[siz];
for(int i = 0; i < siz; i++)
{
a[i] = 0;
}
size = siz;
counter = 0;
}
template <class t>
void array<t>::Input(t x)
{
if( counter != size )
{
a[ counter ] = new t;
*a [ counter ] = x;
counter++;
}
else
{
cout << "Error. Array is full";
}
}
template <class t>
void array<t>::Output()
{
if( counter )
{
for( int i = 0; i <counter; i++)
{
cout << "SHifr: " << a[ i ]->RegCode << "\n";
cout << "FIO: " << a[ i ]->FIO << "\n";
cout << "nazvanie: " << a[ i ]->name<< "\n";
cout << "\r\n";
}
}
else
{
cout << "Error. Array is empty"<<endl;
}
}
template <class t>
void array<t>::OutputByIndex(int ind)
{
if( counter )
{
if( ind > counter )
cout << "Error. Index out of range";
else
{
cout << "SHifr: " << a[ ind-1 ]->RegCode << "\n";
cout << "FIO: " << a[ ind -1]->FIO << "\n";
cout << "nazvanie " << a[ ind -1]->name << "\n";
cout << "\r\n"<<endl;
}
}
else
cout << "Array is empty\n"<<endl;
}
template <class t>
void array<t>::GetSize()
{
cout << counter << "\n";
}
//----------------------------------------------
template <class t>
array<t> array<t>::operator =(array<t> x)
{
counter = x.counter;
size = x.size;
a = new t* [size];
for(int i = 0; i < counter; i++)
{
a[i] = x.a[i];
}
return *this;
}
template <class t>
void array<t>::operator [](int ind)
{
OutputByIndex(ind);
}
template <class t>
array<t> array<t>::operator !()
{
if( counter )
{
for( int i = 0; i < counter; i++ )
{
delete a[i];
a[i] = 0;
}
}
counter = 0;
return *this;
}
template <class t>
bool array<t>::operator ==(array<t> x)
{
if (x.counter !=counter)
return false;
for (int i=0;i<counter;i++)
if (a[i]!=x.a[i] )
return false;
return true;
}
void menu()
{
cout << "\n Viberite:\n";
cout << "\n1. vvod ";
cout << "\n2. vivod ";
cout << "\n3. ! Clear array.";
cout << "\n4. = Prisvaivanie." ;
cout << "\n5. [] vivod po indeksu." ;
cout << "\n6. == proverka na ravenstvo." ;
}
int main()
{
int x, ind;
info temp;
cout << "Input array size: ";
cin >> x;
array<double> obj(x);
array<double> obj1(x);
int i;
while (true)
{
menu();
cin>>i;
clrscr();
switch(i)
{
case 1:
cout << "SHifr: ";
cin >> temp.RegCode;
cout << "Input FIO: ";
cin.get();
cin.getline(temp.FIO, 25);
cout << "Input nazvanie: ";
cin.getline(temp.name,255);
obj.Input(temp);
break;
case 2: obj.Output(); break;
case 3: !obj;!obj1; break;
case 4:
obj1 = obj;
obj.Output();
obj1.Output();
break;
case 5:
cout << "Input index: ";
cin >> ind;
obj[ind];
break;
case 6:
if(obj==obj1)
{ cout<<"MHO}|{ECTBA PABHbI"<<endl;
obj.Output();obj1.Output(); }
else
{ cout<<"MHO}|{ECTBA HE PABHbI"<<endl;
obj.Output();obj1.Output(); }
break;
case 0: return 0;
default : cout<<"\nError!\n" ;
}
}
}
|
|
|