Bonjour,

je dispose d'une classe abstraite qui est héritée par 2 classes. La classe abstraite possède une méthode virtuelle pure avec une définition par défaut. Une des deux classes n'a pas la nécessitée de redéfinir la méthode virtuelle pure.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
class Objet
{
public:
  Objet(int poid) {
    this->poid = poid;
  }
 
  virtual int getPoid() {
    return this->poid;
  }
 
  virtual int getPoidTotal() = 0 {
    return this->poid;
  };
private:
  int poid;
};
 
class Fourchette : public Objet
{
public:
  Fourchette(int poid) : Objet(poid) {}
};
 
class Bouteille : public Objet
{
public:
  Bouteille(int poid, int poidLiquide) : Objet(poid), poidLiquide(poidLiquide) {}
 
  int getPoidTotal() {
    return this->getPoid() + this->poidLiquide;
  }
private:
  int poidLiquide;
};
Le problème est que je me retrouve avec les messages d'erreurs suivant :
- La classe Fourchette est une classe virtuelle, elle ne peut pas être
instanciée.
- La classe Bouteille est une classe virtuelle, elle ne peut pas être
instanciée.

Je suis obligé de redéfinir les méthodes virtuelles pures dans mes classes filles pour que mon code compile.

Y a-t-il une solution pour ne pas avoir à redéfinir systématiquement mes méthodes virtuelles pures et ainsi pouvoir utiliser la définition par défaut de celles-ci ?

Merci d'avance pour votre aide.