Zaczynam uczyć się programowania obiektowego. Jako zadanie wymyśliłem sobie napisanie klasy stos, jednak mam problem z niedziałającym konstruktorem kopiującym.
Pomoże ktoś podpowiedzieć co jest nie tak?
Stworzony poprzez kopiowanie obiekt zdaje się nie istnieć.
#include <iostream>
using namespace std;
class Stos
{
private:
struct element
{
int wartosc;
element *poprzedni;
};
element *dolny, *gorny;
public:
Stos()
{
dolny = gorny = NULL;
}
Stos(const Stos &stosik)
{
if (stosik.gorny != stosik.dolny)
{
element *pom;
pom = stosik.gorny;
gorny = new element;
gorny->wartosc = pom->wartosc;
gorny->poprzedni = new element;
dolny = gorny;
while (pom != stosik.dolny)
{
if (pom->poprzedni != nullptr)
{
pom = pom->poprzedni;
dolny->poprzedni = new element;
dolny = dolny->poprzedni;
dolny->wartosc = pom->wartosc;
}
}
}
else
gorny = dolny = NULL;
}
~Stos()
{
if (gorny == NULL)
delete gorny;
else
{
element *pom;
while(gorny!=dolny)
{
pom = gorny;
gorny=gorny->poprzedni;
delete pom;
}
}
}
void dodaj_element(int n)
{
element *pom;
pom = new element;
pom->poprzedni = gorny;
pom->wartosc = n;
gorny = pom;
cout << "dodalem element: " << gorny->wartosc << endl;
}
void zdejmij_element()
{
element *pom;
pom = gorny;
gorny = gorny->poprzedni;
cout << "zdjalem element: " << pom->wartosc<<endl;
delete pom;
}
void wypisz()
{
element *pom = gorny;
while (pom != nullptr)
{
cout << pom->wartosc << endl;
pom = pom->poprzedni;
}
}
};
int main()
{
Stos stosik;
stosik.dodaj_element(1);
stosik.dodaj_element(2);
stosik.dodaj_element(3);
stosik.dodaj_element(4);
Stos sto = stosik;
sto.wypisz();
return 0;
}