• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Klasa w c++, stos, konstruktor kopiujący.

Object Storage Arubacloud
–1 głos
806 wizyt
pytanie zadane 25 lutego 2017 w C i C++ przez mistrzuniu1 Użytkownik (600 p.)
edycja 25 lutego 2017 przez Patrycjerz

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 odpowiedź

+1 głos
odpowiedź 15 maja 2019 przez anyuq Nowicjusz (160 p.)

wystarczy zmienić na:

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->poprzedni != nullptr)
                {
                    pom = pom->poprzedni;
                    dolny->poprzedni = new element;
                    dolny = dolny->poprzedni;
                    dolny->wartosc = pom->wartosc;
                    dolny->poprzedni=NULL;
                }
 
            
        }
        else
            gorny = dolny = NULL;
    }

ta twoja pętla była nieskończona bo pom nigdy nie byłby NULL'em (co innego pom->poprzedni)

PS. widzę, że późno odpowiadam, ale jak już mam odpowiedź to po prostu wolę się podzielić :P

Podobne pytania

0 głosów
1 odpowiedź 422 wizyt
pytanie zadane 28 kwietnia 2018 w C i C++ przez konu33 Nowicjusz (210 p.)
+1 głos
3 odpowiedzi 560 wizyt
0 głosów
2 odpowiedzi 688 wizyt

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...