Bonjour,
J'essaye de reproduire l'exemple suivant qui est en Java mais en c++ :
Ce qui est affiché est bien "Base Derived" car il y a du polymorphisme avec la méthode toString.
Maintenant, en c++, les deux classes ont une fonction amie qui redéfinie l'opérateur << qui renvoie un stream :
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 public class Base{ public String toString(){ return "Base"; } } class Derived extends Base{ public String toString(){ return super.toString() + " " + "Derived"; } } public class Main{ public static void main(String args[]){ Base derived = new Derived(); System.out.println(derived); } }
Cependant, ce code ne m'affiche que "Base".
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 #include <iostream> class Base { public: friend std::ostream &operator<<(std::ostream &stream, const Base *base); }; class Derived : public Base { public: friend std::ostream &operator<<(std::ostream &stream, const Derived *derived); }; std::ostream &operator<<(std::ostream &stream, const Base *base) { return stream << "Base"; } std::ostream &operator<<(std::ostream &stream, const Derived *derived) { return stream << (Base *)derived << " " << "Derived"; } int main(int argc, char **argv) { Base *derived = new Derived(); std::cout << derived << "\n"; }
Quel est le problème ici?
Merci d'avance
Partager