Polymorphisme et toString
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:
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:
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