Bonjour,
J'ai une classe B qui hérite d'une classe A.
Ces deux classes ( des IHM en fait ) utilisent des présenteurs pA et pB. pB héritant de pA.
Pour des raisons d'architecture, A et B ne peuvent pas connaitre pA et pB directement. J'ai donc définit deux interfaces abstraites ipA, et ipB. ipB hérite de ipA. Mes deux présenteurs héritent donc de ces deux interfaces.
Mais quand je compile, j'ai un erreur m'indiquant que pB ne peut pas être instancié car il est abstrait à cause des fonctions abstaites de ipA.
Ce petit exemple dvrait vous aider à comprendre:
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 #include <iostream> using namespace std; // Interfaces struct ipA { virtual void foo() = 0; }; struct ipB : public ipA { virtual void bar() = 0; }; // Présenteurs struct pA : public ipA { virtual void foo(){ cout << "A::foo" << endl; } }; struct pB : public ipB, public pA { //void foo(){ cout << "B::foo" << endl; } virtual void bar(){ cout << "B::bar" << endl; } }; // IHM struct A { ipA & _p; A( ipA & pa ) : _p(pa){} void a(){ _p.foo(); } }; struct B : public A { ipB & _p; B( ipB & pb ) : A( pb ), _p(pb){} void b(){ _p.bar(); } }; // Et le main qui va bien int main() { pA pa; pB pb; A a(pa); B b(pb); a.a(); b.a(); b.b(); return 0; }D'où la question ultime sur la vie, l'univers et le reste : Comment faire pour mettre en place une telle architecture ?Erreur E2352 heritage.cpp 43: Impossible de crÚer une instance de la classe abstraite 'pB' dans la fonction main()
Erreur E2353 heritage.cpp 43: La classe 'pB' est abstraite parce que ipA::foo() = 0' dans la fonction main()
La seule méthode que j'ai trouvé consiste à redéfinir les méthode de ipA dans pB. Mais ce n'est pas génial.
Partager