Ir ao conteúdo

Posts recomendados

Postado

Estou iniciando em C++ (tenho experiencia em outras linguagens) e gostaria de entender como funciona as funções virtuais. Estou implementando uma arvore genérica para classes e me deparei com um erro ao tentar implementar uma função virtual: "object of abstract class type "Person" is not allowed: -- pure virtual function "tree::Node::compareTo" has no overrider"


Notei que o erro rola por que na minha declaração da classe abstrata eu coloquei um Node* como parâmetro e na implementação da classe person eu usei como a própria classe person, que estende de Node.


A minha dúvida é se tem como fazer algo assim:

Classe Node

Classe abstrata que contem os ponteiros para esquerda e direta e força a implementação do método compareTo (depois irei mudar para sobrecarga de operadores).

Classe Objeto(neste caso, pessoa)

Classe que será de fato o nó da arvore. Implementa a classe node, possuindo o método compareTo para fazer as comparações para inserção, remoção e busca.

Classe Tree

Classe que possui a implementação da árvore. Ela pode ser feita qual qualquer classe que estenda de Node pois é garantido que ela irá possuir o método compareTo


Código Fonte Coloquei no pastebin para não poluir o tópico
Node.h
Node.cpp
Person.h
Person.cpp
Main.cpp

Postado

Pode sim, o problema é que a a declaração do método  tem que ser idêntico (mesmo nome, quantidade e tipo de variáveis). O que quero dizer é:

// Clase Pai
Class Node{
        public:
            Node();
 
            /*
            * Return -1 if this node is less than parameter
            * Return 0 if nodes are equal
            * Return 1 if parameter is greater than this node
            */
            virtual int compareTo(Node *Node) = 0;

(...)
//Classe "Filha"
class Person : public Node{
    public:
        Person();
        Person(int id, string name);
 
        void printPerson();
 
        //getters and setters
        int getId();
        string getName();
 
        void setId(int id);
        void setName(string name);
 
        //virtual functions
        //int compareTo(Person *p); 
        int compareTo(Node *Node); //tem que ser IDENTICO

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!