Stos liczb +operatory

0

Witam
mam takie zadanie do zrobienia:
Zbuduj klasę StosLiczb, która będzie obsługiwała stos liczb całkowitych.
Liczby mają być zapamiętywane w tablicy o określonym rozmiarze.

Klasa ma zawierać następujące operatory:
 << operator wkładania na stos,
na przykład: s << n wkłada liczbę n na stos. Jeśli stos jest pełny nic nie robi.

 >> operator zdejmowania ze stosu,
na przykład s >> n zdejmuje ze stosu s liczbę i umieszczają w n. Jeśli stos jest pusty, n otrzymuje wartość 0.

Operatory << i >> powinny dawać się użyć w instrukcjach o postaci:
s << n1 << n2 << n3; // włożenie kilku elementów na stos
c>> n1 >> n2 >> n3; // zdjęcie kilku elementów ze stosu
Napisz funkcję main umożliwiającą testowanie opracowanej klasy.

Poniżej wrzucam napisany przez mnie kod. Niestety nie dziala tak jak trzeba. Prosze o pomoc.

#include <iostream>
using namespace std;

class StosLiczb
{
private:
    int max;
    int liczba_elementow; // bieżąca liczba wartości na stosie
    double *T; // wskaźnik do obszaru przydzielonego dla tablicy
public:
    StosLiczb(int n=0); // konstruktor
    ~StosLiczb(); // destruktor
    StosLiczb(StosLiczb & s); // konstruktor kopiujący
    StosLiczb & operator=(StosLiczb &s);; // przypisanie – wyświetlenie komunikatu,
//że operacja nie jest dostępna i
// zakończy wykonywanie programu
    StosLiczb & operator<<(int n); // wstawianie na stos
    StosLiczb & operator>>(int &n); // zdejmowanie ze stosu

    StosLiczb(double * sou, int n);
    double & operator[] (int);
    void wypisz();
    int stanStosu(); // ilosc liczb

};

StosLiczb::StosLiczb(int n)// konstruktor
{
    T=new double[liczba_elementow = n];
}

StosLiczb::~StosLiczb()// destruktor
{
    delete [] T;
}

StosLiczb::StosLiczb(StosLiczb &s)// konstruktor kopiujący
{
    double *T = new double [liczba_elementow=s.liczba_elementow];
    int i;
    for(i=0; i<liczba_elementow; i++)
    {
        T[i]=s.T[i];
    }
}

StosLiczb& StosLiczb::operator=(StosLiczb &s)
{
    if (this!=&s)
    {
        delete [] T;
        T=new double[liczba_elementow=s.liczba_elementow];

        for (int i=0; i<liczba_elementow; i++)
            T[i]=s.T[i];
    }
    else cout <<"operacja nie jest dostępna i zakończy wykonywanie programu" << endl;
    return *this;
}

StosLiczb::StosLiczb(double * sou, int n)
{
    max = n;
    liczba_elementow = n;
    T = new double[max];
    for (int j = 0; j < n; j++)
    {
      T[j] = sou[j]; 
    }
}

double & StosLiczb::operator[] (int k)
{
    if (k < 0 || k > liczba_elementow) k=0; 
    return T[k];
}

StosLiczb& StosLiczb::operator<<(int n)
{
    if( liczba_elementow < max )
    T[liczba_elementow++] = n;
    return *this;
}

StosLiczb& StosLiczb::operator>>(int &n)
{
    if (liczba_elementow > 0) n = T[--liczba_elementow];
    return *this;
}


int StosLiczb:: stanStosu()
 {
        return liczba_elementow-1;
 }

 void StosLiczb::wypisz()
{

   int ile = n-1;
    for(int i= 0; i<=ile;i++)
   {
        cout << &T[i] << " ";
   }
}



int main()
{
    int n;
    int ile_liczb;
    StosLiczb s;
    cout << "\tOPERACJE NA STOSIE" << endl;
    cout << endl;
    cout << "Podaj ilosc liczb, ktore chcesz wlozyc na stos: ";
    cin >> ile_liczb;

    for(int i=1; i<=ile_liczb; i++)
    {
    cout << "Podaj " << i << " liczbe: ";
    cin >> n;
    s.operator<<(ile_liczb);
    }
    cout << endl;
    int ile = s.stanStosu();
    cout << "Na stosie jest " << ile + 1 <<" liczb(a)" <<endl;
    cout << endl;
    cout << "Stos wyglada tak: ";
    s.wypisz();

    return 0;
} 
0
  1. for(i=0; i<liczba_elementow; i++) T[i]=s.T[i]; - poczytaj o memcpy
  2. else cout <<"operacja nie jest dostępna i zakończy wykonywanie programu" << endl; - czyżby nie mogę zapisać t[i]=t[k]; kiedy i==k ?
  3. if (k < 0 || k > liczba_elementow) k=0; - wciąż T[k] może być poza tablicą
    A co nie działa?
0

Przy kompilacji nie wyświetla wprowadzonych liczb na stos.

0

Przy kompilacji program się kompiluje do postaci kodu binarnego, dziwnie wyglądałoby wyświetlenie liczb przy tym.
Oczywiście przeczytałeś komunikat kompilatora?

1 użytkowników online, w tym zalogowanych: 0, gości: 1