Показать сообщение отдельно

  #10  
Старый 22.05.2008, 22:19
}I{ek
Новичок
Регистрация: 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" ;
        }
    }
}
 
Ответить с цитированием