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.

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);
  }
}
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
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";
}
Cependant, ce code ne m'affiche que "Base".

Quel est le problème ici?

Merci d'avance