comment puis-je surcharger « < < » opérateur (pour Cout) pour que je puisse faire « Cout » à une classe kopérateur << surcharge C++
Répondre
La mise en œuvre canonique de l'opérateur de sortie pour tout type T
est la suivante:
std::ostream& operator<<(std::ostream& os, const T& obj)
{
os << obj.get_data1() << get_data2();
return os;
}
Notez que les opérateurs de flux de sortie ne sont généralement pas des fonctions membres. (En effet, pour que les opérateurs binaires soient des fonctions membres, ils doivent être membres de leur type d'argument de gauche, mais pas de votre propre type, à l'exception de quelques surcharges de operator<<()
pour certaines fonctions intégrées. , qui sont membres de la classe de flux de sortie.)
cet effet, sinon toutes les données de T
est accessible au public, cet opérateur doit être un ami de T
class T {
friend std::ostream& operator<<(std::ostream&, const T&);
// ...
};
ou l'opérateur appelle une fonction publique qui ne le streaming:
class T {
public:
void write_to_stream(std::ostream&);
// ...
};
std::ostream& operator<<(std::ostream& os, const T& obj)
{
obj.write_to_stream(os);
return os;
}
L'avantage de ce dernier est que la fonction membre write_to_stream()
peut être virtual
(et pure), permettant la diffusion de classes polymorphes.
Si vous voulez être de fantaisie et de soutenir tous les types de flux, vous auriez à ce que créer des modèles à:
template< typename TCh, typename TTr >
std::basic_ostream<TCh,TTr>& operator<<(std::basic_ostream<TCh,TTr>& os, const T& obj)
{
os << obj.get_data1() << get_data2();
return os;
}
(. Modèles, cependant, ne fonctionnent pas avec des fonctions virtuelles)
- 1. Surcharge en C++ << opérateur
- 2. Opérateur << surcharge en C++
- 3. opérateur << travailler Surcharge pour chaîne
- 4. Surcharge << opérateur C++ - Pointeur vers la classe
- 5. opérateur << en C#
- 6. Surcharger << opérateur en C++
- 7. << opérateur Ruby
- 8. opérateur << Ambigu
- 9. problème de surcharge l'opérateur <en C++
- 10. Amis, modèles, surcharge <<
- 11. Opérateur C++ + et opérateur + = surcharge
- 12. opérateur <<: std :: cout << i << (i << 1);
- 13. Visual C++ ne voit pas l'opérateur << surcharge
- 14. Opérateur de surcharge << pour accepter une fonction de gabarit
- 15. Comment définir une classe spécifique << opérateur en C++
- 16. boost :: bind et << opérateur en C++
- 17. surcharge -> opérateur C++
- 18. opérateur surcharge en C++
- 19. C# en surcharge opérateur
- 20. appel opérateur << en gdb
- 21. C++ - Chaînes d'alphabétisation - '<' Surcharge d'opérateur
- 22. opérateur binaire "<"
- 23. C++ vector <T> :: opérateur d'itérateur +
- 24. Opérateur de surcharge C# == et! =
- 25. opérateur stringstream << pour un type de modèle
- 26. opérateur [] surcharge
- 27. Opérateur de modèle << instanciation explicite et en-tête
- 28. Pourquoi cette << surcharge ne compile-t-elle pas
- 29. fonctions 'friend' et << surcharge de l'opérateur: Quelle est la bonne façon de surcharger un opérateur pour une classe?
- 30. C++: surcharge de <pour des pointeurs vers des objets
cette "cout << k" (k est une classe) – aharon