Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C++ OOP - implementace stacku pomocí pointerů

Tak jsem začal s OOP. Ze školy jsem to (jako obvykle :D) moc nepobral, tak to zkouším tady. Moje idea byla, udělat stack defacto jako seznam (bez pole mě nenapadá, jak jinak se "vrátit" k prvkům pod topem), ale mám problém - v metodě Push nemůžu přijít na to, jak předat adresu předchozího prvku tomu novému jako prev (objekt item se vytvoří vždy nově a mimo fci to s ním nějak odmítá manipulovat :D).

P.s.: Jaký je rozdíl mezi stack *identifikator a stack *identifikator = new stack (stack je název třídy)?

Tady je kód:

#include <iostream>

using namespace std;

class stack{
private:
	int num; //hodnota prvku
	stack *next; //dalsi prvek
	stack *prev; //predchozi prvek - nenapada me, jak to lip resit, tady pouzivam pro prirazeni na vrchol, pri odebirani prvku Popem
public:
	stack();
	void Push(int push_num, stack *top); //fce prebira jako parametr cislo, ktere se ma vlozit a nejvyssi prvek
	int Pop(stack *top); //fce vraci prvek z vrcholu zasobniku a zaroven ho odebira
	int Top(stack *top);
	bool IsEmpty(stack *top);
	~stack();
};

/**
	@brief Konstruktor - inicializuje num a next na NULL
*/
stack::stack(){
	num = NULL;
	next = NULL;
	prev = NULL;
}

/**
	@brief Push - funkce vlozi novy prvek na vrchol zasobniku
	@param1 hodnota vkladaneho cisla
	@param2 vrchol zasobniku
*/
void stack::Push(int push_num, stack *top){	
	stack *item = new stack; //vytvorim novy objekt tridy stack

	item->num = push_num;

	if(top->num == NULL){
		*top = *item;
		top->next = NULL;
		item->prev = top;
	}else{
		top->next = item;
		*top = *top->next;
		top->next = NULL;
	}
}

int stack::Pop(stack *top){

	if(top->num == NULL){
		cout << "V zasobniku nejsou zadne prvky!" << endl;
		return NULL;
	}else{
		int ret_num; //vracene cislo
		ret_num = top->num;
		if(top->prev == NULL){
			top->num = 999;
		}else{
			*top = *top->prev;
		}
		return ret_num;
	}	
}

int stack::Top(stack *top){
	return top->num;
}

bool stack::IsEmpty(stack *top){
	if(top->num == NULL){
		return true;
	}
	return false;
}

stack::~stack(){
	cout << "Ahoj :-)" << endl;
}

int main(){
	stack zasobnik; //vytvorim objekt

	zasobnik.Push(5, &zasobnik);
	zasobnik.Push(6, &zasobnik);
	cout << zasobnik.Pop(&zasobnik) << endl;
	cout << zasobnik.Top(&zasobnik) << endl;
	cout << zasobnik.IsEmpty(&zasobnik) << endl;


	return 0;
}
Jinak moc díky za rady, netuším, co bych bez tohohle fóra dělal :D

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny