Bonjour, oui encore un post sur l'héritage multiple mais je n'ai pas trouvé de réponses
Voilà le code testé :
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <string>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
 
class Controller
{
public:
 
	virtual ~Controller() {};
	virtual bool isTimeBased() const = 0;
	virtual void update(float dt) const = 0;
};
 
 
class TimeBasedController : virtual public Controller
{
public:
 
	virtual ~TimeBasedController() {};
	bool isTimeBased() const { return true; }
};
 
class RealTimeInputController : virtual public Controller
{
public:
 
	virtual ~RealTimeInputController() {}
	bool isTimeBased() const { return false; }
};
 
 
class PathController : virtual public Controller
{
public:
 
	virtual ~PathController() {};
	void update(float dt) const { getPath(dt); }
	virtual void getPath(float dt) const = 0;
};
 
 
class MyPathController : public PathController, public TimeBasedController
{
public:
 
	void getPath(float dt) const { std::cout<< "getting path 1" << std::endl; }
};
 
class MyPathController2 : public PathController, public RealTimeInputController
{
public:
 
	void getPath(float dt) const { std::cout<< "getting path 2" << std::endl; }
};
 
 
int main()
{
   MyPathController p1;
   MyPathController2 p2;
   std::string s1,s2;
   p1.isTimeBased() ? s1 = "p1 is time based" : s1 = "p1 is not time based";
   p2.isTimeBased() ? s2 = "p2 is time based" : s2 = "p2 is not time based";
 
   std::cout << s1 << std::endl;
   std::cout << s2 << std::endl;
   p1.update(0);
   p2.update(0);
 
   system("pause");
 
   return 0;
}
Et maintenant à la compilation avec visual express 2008 en /W3 j'obtiens ces warning :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
warning C4250: 'MyPathController'*: hérite de 'TimeBasedController::TimeBasedController::isTimeBased' via la dominance [...]*: voir la déclaration de 'TimeBasedController::isTimeBased'
warning C4250: 'MyPathController'*: hérite de 'PathController::PathController::update' via la dominance [...]*: voir la déclaration de 'PathController::update'
warning C4250: 'MyPathController2'*: hérite de 'RealTimeInputController::RealTimeInputController::isTimeBased' via la dominance [...]*: voir la déclaration de 'RealTimeInputController::isTimeBased'
warning C4250: 'MyPathController2'*: hérite de 'PathController::PathController::update' via la dominance [...]*: voir la déclaration de 'PathController::update'
Mais la sortie obtenue est bien celle que j'attend:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
p1 is time based
p2 is not time based
getting path 1
getting path 2
Appuyez sur une touche pour continuer...
J'ai vu également ce lien concernant le warning, mais je ne suis quand même pas sûr que ce bout de code soit bien formé niveau c++...
Merci d'avance, bonne journée