Bonjour à tous,
Tout d'abord, désolé pour le titre mais je ne savais pas trop quoi mettre...
Je suis en train de me programmer une classe pour m'aider dans mes développements. Le but de cette classe est de fournir les opérateurs d'égalité et de comparaison (comme std::rel_ops).
Mais voilà, j'ai un 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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 #include <iostream> #include <string> using namespace std; namespace { class Operator { public: virtual ~Operator() throw() {} virtual bool operator == (const Operator &op) const throw() { cout << "Operator ==" << endl; return !(*this != op); } virtual bool operator != (const Operator &op) const throw() { cout << "Operator !=" << endl; return !(*this == op); } virtual void fct1(const Operator &op) const throw() { cout << fct2() << endl; cout << op.fct2() << endl; } virtual string fct2() const throw() { return "Operator fct2()"; } }; class Test : public Operator { int _nb; public: Test(int n) : _nb(n) {} virtual ~Test() throw() {} virtual bool operator == (const Test &op) const throw() { cout << "Test ==" << endl; return _nb == op._nb; } virtual string fct2() const throw() { return "Test fct2()"; } }; } int main(int argc, char *argv[]) { Test t1(3), t2(5); t1.fct1(t2); // {1} if (t1 == t2) // {1} cout << "t1 == t2" << endl; else if (t1 != t2) // {2} cout << "t1 != t2" << endl; return 0; }
- {1} : ici la fonction va faire un appel à Operator::fct1() qui elle même fait appel à Test::fct2(). Tout fonctionne correctement.
- {2} : j'appelle directement la fonction Test::operator==(), donc ok ça fonctionne.
- {3} : ...et c'est ici que je plante : le premier appel utilise Operator::operator!=(), par contre celle-ci fait appel à Operator::operator==() à la place de Test::operator==().
Est-ce que je me suis planté quelque part ? Vu que les fonctions fct1/fct2 marchent bien...
Merci pour votre aide,
Tipoun
Partager