Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paulo_Arais

Pilha orientada a objetos no C++

Recommended Posts

Estou fazendo um trabalho na faculdade onde eu tenho que implementar uma pilha estática e uma pilha dinâmica mas tem um detalhe, precisa ser orientada a objetos. Eu não tenho idéia de como eu vou fazer isso então se alguém puder mostrar alguma pilha nesse estilo já feita eu agradeceria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código fonte está aqui...

 

// implementação de uma pilha estática#ifndef pilha_h#define pilha_h#include <iostream.h>//----------------------------template <class tipo, int TAM>struct pilha{   tipo dados[TAM];   int topo;};//-------------------------------template <class tipo, int TAM>void inicializa_pilha(pilha<tipo,TAM> &pl){   pl.topo = -1;}//---------------------------------------------template <class tipo, int TAM>bool empilha(pilha<tipo,TAM>& pl, tipo valor){   if( !se_cheia(pl) ){ //se não esta cheia      pl.dados[++pl.topo] = valor;      return true;   }   else      return false;}//-------------------------------------------------template <class tipo, int TAM>tipo desempilha(pilha<tipo,TAM> &pl){   return pl.dados[pl.topo--];}//--------------------------------------------------template <class tipo, int TAM>tipo retorna_topo(pilha<tipo,TAM> &pl){   if(se_vazia(pl) )//se estiver vazia      return(NULL);   else      return (pl.dados[pl.topo]);//apenas retorna o elemento do topo sem decrementá-lo}//------------------------------------------------------------template <class tipo, int TAM>bool se_cheia(pilha<tipo,TAM> &pl){   return (pl.topo == TAM-1) ? true : false;}//---------------------------------------------------------------template <class tipo, int TAM>bool se_vazia(pilha<tipo,TAM> &pl){   return (pl.topo ==-1) ? true : false;}//-----------------------------------------------------------------//rotina aux de exibição da pilha//Esta rotina exibe os elementos da pilha utilizando a console (Janela do MS-DOS). Não terá//nenhum resultado se você utilizá-la em uma aplicação visual (utilizando Forms).template <class tipo, int TAM>void mostra_pilha(pilha<tipo,TAM> &pl){   int aux = pl.topo;   while (aux >=0)      cout<< pl.dados[aux--]<<"\t";   cout<<endl;       }//-------------------------------------------------------------#endif// implementação de uma pilha Dinamica  // Disciplina de Estruturas de Dados// Professor Rudimar Scaranto Dazzi#ifndef pilha_din_h#define pilha_din_h#include <iostream.h>//pilha dinamica//----------------------------------------------------------------template <class tipo>struct pilha{   tipo dado;   pilha<tipo>* anterior;};//----------------------------------------------------------------template <class tipo>void inicializa_pilha(pilha<tipo>* &p){   p = NULL;}//----------------------------------------------------------------template <class tipo>void empilha(pilha<tipo>* &p, tipo dado){   pilha<tipo>* aux = new pilha<tipo>;   aux->dado = dado;   aux->anterior = p;   p = aux;}//----------------------------------------------------------------template <class tipo>tipo desempilha(pilha<tipo>* &p){   tipo valor = p->dado;   pilha<tipo>* aux = p;   p = p->anterior;   delete aux;   return valor;}//----------------------------------------------------------------template <class tipo>bool se_vazia(const pilha<tipo>* &p){   return (p == NULL) ? true : false;}//----------------------------------------------------------------/*template <class tipo>void mostra_pilha(pilha<tipo>* &p){   pilha<tipo>* atual = p;   while( atual!= NULL){      cout<<atual->dado<<"\t";      atual = atual->anterior;   }}//---------------------------------------------------------------template <class tipo>tipo retornaTopo( pilha<tipo>* p){   if(! se_vazia(p) )//se não estiver vazia      return p->dado;   else      return NULL;}//-------------------------------------------------------------#endif

A minha dúvida cruel é... como eu vou fazer isso orientado a objetos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro:Imagine a pilha como um objeto.Imagine os dados que uma pilha possue. Ex: Dado, Tamanho, etc. Imagine as características de uma pilha. Ex: insere um elemento, exibe a pilha, etc.Essa será sua classe "pilha". Os dados da pilha serão seus "atributos" e as características da pilha, o que ela faz serão seus "métodos".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz a pilha dinâmica. Ficou desse jeito aqui.

 

#ifndef pilha_din_obj_h#define pilha_din_obj_h#include <iostream>using namespace std;//pilha dinamica//----------------------------------------------------------------template <class tipo>class pilha {    private:tipo dado;pilha<tipo>* anterior;public:void inicializa_pilha(pilha<tipo>* &p);void empilha(pilha<tipo>* &p, tipo dado);tipo desempilha(pilha<tipo>* &p);bool se_vazia(const pilha<tipo>* &p);tipo retornaTopo( pilha<tipo>* p);};template <class tipo>void pilha<tipo>::inicializa_pilha(pilha<tipo>* &p){p = NULL;}//----------------------------------------------------------------template <class tipo>void pilha<tipo>::empilha(pilha<tipo>* &p, tipo dado){pilha<tipo>* aux = new pilha<tipo>;aux->dado = dado;aux->anterior = p;p = aux;}//----------------------------------------------------------------template <class tipo>tipo pilha <tipo>:: desempilha(pilha<tipo>* &p){tipo valor = p->dado;pilha<tipo>* aux = p;p = p->anterior;delete aux;return valor;}//----------------------------------------------------------------template <class tipo>bool pilha <tipo>:: se_vazia(const pilha<tipo>* &p){return (p == NULL) ? true : false;}//----------------------------------------------------------------template <class tipo>tipo pilha <tipo>:: retornaTopo( pilha<tipo>* p){if(! se_vazia(p) )//se não estiver vaziareturn p->dado;elsereturn NULL;}//-------------------------------------------------------------#endif

Claro que ainda tem que melhorar muito esse código mas não estou com tanto tempo disponível pra isso :(.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.