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;
}