2010-04-15 5 views
0

J'ai une classe dérivée dérivée d'une classe abstraite. Le code est ci-dessous. J'ai une classe FishTank qui est dérivée d'un Aquarium et Aquarium est dérivé de l'article. Ma question est que devrais-je mettre la définition de virtual int minWidth() const = 0; dans l'aquarium à nouveau ou le code ci-dessous est-il suffisant?Classe abstraite en C++

class Item{ 
public: 
    virtual int minWidth() const = 0; 
}; 

class Aquarium: public Item{ 
public: 
    virtual int calWidth() = 0; // Pure virtual function. 
}; 

class FishTank : public Aquarium{ 
    public: 
     FishTank(int base1, int base2, int height); 
     ~FishTank(); 
    int calWidth(); 
     int minWidth(); 
}; 

Répondre

6

Il n'y a aucune raison de recommencer. Cela ne sert qu'à gaspiller de l'espace et vous donne l'occasion d'obtenir des erreurs de compilation à partir des fautes de frappe. :) Une fois que vous avez hérité, c'est comme si ça avait été là de toute façon.

Cependant, vous ne l'avez jamais implémenté! Pourquoi? Vous êtes absent const dans FishTank:

int minWidth() const; // <-- const! 
1

Vous n'avez pas besoin de re-déclarer minWidth; la fonction virtuelle pure sera héritée de Item.

1

Voulez-vous dire "définition" ou simplement "déclaration"? Si une définition par défaut appropriée est susceptible d'être applicable à tous les Aquariums, alors définissez-la dans la classe Aquarium, mais vous ne voudrez pas la rendre pure virtuelle, sinon toutes les classes dérivées devront toujours la surcharger même si elles veulent juste appelle l'implémentation de la classe de base.

Sinon, il ne sert à rien de le déclarer à nouveau. De toute façon, les classes concrètes dérivées doivent toujours remplacer la fonction et le comportement de la fonction lorsqu'elle est appelée via un pointeur ou une référence à Item ou à Aquarium ne change rien.