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