j'aimerais bien faire un truc un peu special, que je decris dans ce petit bout de code. Oui oui je sais que deux instances de A sont créées dans la création de C, c'est bien ce que je veux
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 #include <iostream> using namespace std; class A { public: A() { cout << "A created" << endl; } virtual void method() = 0; }; class B : public A { public: void method() { cout << "method B" << endl; } }; class C : public B, public A { public: void method() { // la je veux redefinir A::method() cout << "method C" << endl; } }; void func(A & a) { a.method(); } int main() { C c; func(c); }
mais le compilo il veut pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 inheritance.cpp:21: warning: direct base `A' inaccessible in `C' due to ambiguity inheritance.cpp: In function `int main()': inheritance.cpp:34: error: `A' is an ambiguous base of `C'
bon vous avez compris ce que je veux faire
Vous me direz que ce n'est pas propre mais je ne vois pas le problème de conception moi, dans C il suffirait de spécifierA:: ou B::A:: pour avoir un accès non ambigus a tous les membres...
qu'est ce que vous en dites ? comment résoudre ce "problème" ?
Partager