Klasa stos, problem z konstruktorem kopiującym

0

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

Nie działa to może sobie powiedzieć pani Basia z działu rachunkowości, gdy nie otrzymasz wypłaty na czas - opisz dokładnie co się dzieje, nie dzieje, czego się spodziewałeś itd.

0

Po wykonaniu pracy przez konstruktor kopiujący, powinien utworzyc sie nowy stos z tymi samymi danymi jednak nowymi wskaznikami, tak by praca na jednym nie modyfikowała drugiego. Po próbie wypisanie zawartości stosu drugiego program po prostu przestaje działac(nie zawiesza się, ale tkwi w martwym punkcie).

Sledziłem rownież debuggerem czy rzeczywiście następuje przepisanie wartości i wydawało się, że tak.

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