• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

strikezzz@gmail.com

[c++] classes (heranca) e iteradores

1 mensagem neste tópico

Boas !

Tou a fazer um trabalho para a faculdade que consiste em criar um mapa de bits que guarde todos os valores de uma dada sequencia de valores inteiros que e dada pelo o utilizador e que dessa sequencia de valores inteiros "marque" os valores que o utilizador quer inserir ou "desmarque" os que o utilizador quer tirar.

Para isto criei um map <int,bool> mapBits; para ter tds os valores da sequencia pedida pelo utilizador representados pelo int e o booleano para se tiver a true dizer q o valor foi inserido e false se não tiver sido inserido ou tiver sido inserido e removido.

Até aqui n tive problemas tinhamos uma classe definida num ficheiro .h

#include "IntSet.h"
#include <iostream>
#include <map>
using namespace std;

class IntBitSet: {
int minimo, maximo, posi, tamanho;
map <int,bool> mapBits;

public:
IntBitSet();
IntBitSet( int min, int max );

void add( int  );              
void remove( int );
bool contains( int )const;
int min() const;
int max() const;

};

criamos um ficheiro .cpp para defenirmos tds as funcoes da class IntBitSet nao tenho problemas ate aqui crio com o construtor o mapBits e atraves do metodo add vou ao mapa para meter a parte booleana da posicao do mapa dada pelo valor inteiro que quero inserir desta forma this->mapBits[ i ]=true sendo i o valor inteiro que se quer inserir. Fazendo da mm forma para remover os valores.

O método contains serve para ver se o valor foi inserido ou não e os métodos min e max servem para retornar o valor minimo e maximo respectivamente do map.

Agora dao nos uma nova classe IntSet em que a classe criada anteriormente ( IntBitSet ) tem de derivar dela e aqui comecam os meus problemas, a classe e definida por um ficheiro .h e um ficheiro .cpp ja com alguns metodos definidos. Fica aqui o ficheiro .h

#ifndef INT_SET_H
#define INT_SET_H

// Iterador para percorrer um IntSet
class IntIterator {
public:
// Indica se existe mais um elemento
virtual bool hasNext() =0;

// Avança para o proximo elemento e retorna-o
virtual int next() =0;
};

// Classe base abstracta dos cunjuntos de inteiros
class IntSet {
public:
        virtual IntIterator * iterator() const = 0;
        virtual void add(int elem) = 0;
virtual void remove(int elem) = 0;
virtual size_t cardinal() const ; // Implementação por omissão
virtual bool contains(int elem) const ; // Implementação por omissão
void print() const ;
};

#endif

No ficheiro cpp os metodos que tao definidos sao o cardinal, contains e print.

As minhas duvidas sao :

  • quando meto a classe IntBitSet a derivar de IntSet, tenho de defenir tds os metodos da classe IntIterator ou tenho de criar uma class IntIterator dentro do ficheiro da classe IntBitSet, para esta derivar de IntIterator ???
    Porque este IntIterator é que vai servir para percorrer os meus valores de IntSet...
  • os metodos ja definidos no cpp da classe IntSet vao ter de ser definidos na classe IntBitSet de forma a chamarem os da classe IntSet???

Fico a espera de ajuda ...

obrigado strikez

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora