1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#include <iostream>
#include <cmath>
using namespace std;
class Par {
private:
double left;
double right;
public:
Par() {left = 0; right = 0;}
Par(double l, double r) {left = l; right = r;}
void set_left(double n) {left = n;}
void set_right(double n) {right = n;}
double get_left() const {return left;}
double get_right() const {return right;}
};
class Ponto: public Par {
public:
Ponto():Par() {};
Ponto(double x, double y):Par(x,y) {};
void set_abc(int x) {set_left(x);}
void set_ord(int y) {set_right(y);}
double get_abc() {return get_left();}
double get_ord() {return get_right();}
virtual void print() const {
cout << "(" << get_left() << "," << get_right() << ")" << endl;}
};
template <class C, int I>
class Pilha
{
private:
typedef struct list_node
{ C * elem;
struct list_node * next;
}List_node, * List_node_ptr;
List_node_ptr list;
Ponto C[I];
public:
Pilha()
{ list = NULL; }
virtual bool isempty() const
{ if (list == NULL)
return true;
else return false; }
virtual void listcons(C& x)
{ List_node_ptr aux = new List_node;
aux->elem = &x;
aux->next = list;
list = aux; }
virtual C listhead() const
{ if (isempty())
{ cout << "Lista Vazia"<<endl;
}
else
return *(list->elem); }
virtual void listtail()
{ if (isempty())
cout<<"Lista Vazia"<<endl;
else
{ List_node_ptr aux = list;
list = list -> next;
delete aux; }
}
virtual void printpilha() const
{
List_node_ptr aux = list;
while (aux != NULL)
{ aux->elem->print();
aux = aux -> next; }
}
};
int main()
{
Pilha <Ponto, 10> pp;
Ponto p(1,2);
Ponto q(3,4);
pp.listcons(p);
pp.listcons(q);
pp.printpilha();
}; |
Partager