Ahoj, chcel som implementovať Stack v C++ pomocou OOP a pola (vektor som nechcel).
Stack.cpp
// Stack.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "Stack.h"
#include <assert.h>
#include <iostream>
Stack::Stack()
{
Stack::sizeOfStack = 0;
}
Stack::~Stack() {
delete[] Stack::st;
}
void Stack::push(int num) {
Stack::st[sizeOfStack++] = num;
}
int Stack::size() {
return Stack::sizeOfStack;
}
bool Stack::isEmpty() {
return Stack::sizeOfStack == 0;
}
int Stack::pop() {
assert(!(Stack::sizeOfStack == 0));
return Stack::st[sizeOfStack--];
}
void Stack::print() {
for (int i = 0; i < Stack::sizeOfStack; ++i)
std::cout << Stack::st[i] << " ";
std::cout << std::endl;
}
Stack.h
#ifndef STACK
#define STACK
class Stack {
private:
unsigned short sizeOfStack;
int *st = new int[sizeOfStack];
public:
bool isEmpty();
int pop();
void print();
void push(int num);
int size();
Stack();
~Stack();
};
#endif
Otázkou je, že prečo to funguje? Skúšal som iba jeden prípad kedy som to naplnil 4 hodnotami a skúšal
som popovať a fungovalo to. Plán bol dynamicky zväčšovať pole po push() , avšak nejak som na to zabudol , pustil a ide to aj takto. Prepisujem v tomto prípade pamäť ktorú nevlastním?