Bonjour,
Voici le problème auquel je suis confronté. J'ai une classe Abstraite (donc virtuelle pure) et une classe qui Fille qui hérite de la classe Abstraite. La classe Fille réimplémente bien les méthodes virtuelles pures, mais ne réimplémente pas toutes les autres méthodes de la classe Abstraite.
J'instancie un pointeur du type de la Classe Fille et lorsque j'essaie d'accéder à une méthode de la classe Abstraite que la classe Fille n'a pas réimplémenté, j'ai une erreur de compilation.

Voici le code ( il est ici simplifié au maximum mais montre bien le problème )
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
36
37
38
39
40
41
42
43
44
45
46
47
 
#include <string>
 
using namespace std;
 
class Abstraite
{
	public:
	  void fonction(string Fichier) 
		{
			std::cout << "Abstraite::fonction(std::string Fichier)" << Fichier << std::endl;
		}
 
		virtual void fonction(int i)
		{
			std::cout << "Abstraite::fonction()" << i << std::endl;
		}
 
		virtual void abstraction() = 0;
};
 
class Fille : public Abstraite
{
	public:
		virtual ~Fille() 
		{
			std::cout << "Fille::~Fille()" << std::endl;
		}
 
		virtual void fonction(int i)
		{
			std::cout << "Fille::fonction()" << i << std::endl;
		}
 
		void abstraction()
		{
			std::cout << "Fille::abstraction()" << std::endl;
		}
};
 
int main (int arcg, char* argv[])
{
	Fille* ptrFille = new Fille();
	ptrFille->fonction(std::string("Ma Phrase"));
 
	return 0;
}
et voici l'erreur du compilateur
test.cpp: In function 'int main(int, char**)':
test.cpp:44: erreur: no matching function for call to 'Fille::fonction(std::string)'
test.cpp:30: note: candidats sont: virtual void Fille::fonction(int)
J'utilise le compilateur :
g++ (GCC) 4.2.2
Copyright © 2007 Free Software Foundation, Inc.
Ce logiciel est libre; voir les sources pour les conditions de copie. Il n'y a PAS
GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER.
sous Linux RHLE 5.4.

Petites remarques que je ne m'explique pas :
  1. Si je supprime la méthode fonction(int i) des deux classes, le prgramme compile
  2. Si je caste le pointeur en un pointeur de type Abstraite, le programme compile