myclass
est une classe C++ écrit par moi et quand j'écris:Comment puis-je utiliser Cout << maclasse
myclass x;
cout << x;
comment sortie 10
ou 20.2
, comme un integer
ou une valeur float
?
myclass
est une classe C++ écrit par moi et quand j'écris:Comment puis-je utiliser Cout << maclasse
myclass x;
cout << x;
comment sortie 10
ou 20.2
, comme un integer
ou une valeur float
?
il est très facile, mettre en œuvre tout:
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
Vous devez renvoyer une référence à os pour la chaîne du outpout (Cout < < foo < < endl)
Généralement par surcharge operator<<
pour votre classe:
struct myclass {
int i;
};
std::ostream &operator<<(std::ostream &os, myclass const &m) {
return os << m.i;
}
int main() {
myclass x(10);
std::cout << x;
return 0;
}
Cela afficherait la valeur du constructeur '10'? –
Notez que si 'myclass' a des champs' private' et que vous voulez 'operator <<()' pour les afficher, 'myclass' devrait déclarer' std :: ostream & operator << (std :: ostream &, myclass const &) 'comme un ami. –
Cela ne devrait-il pas être 'const myclass & m' au lieu de' myclass const & m'? – Nubcake
Vous devez surcharger l'opérateur <<
,
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
Puis, quand vous faites cout << x
(où x
est de type myclass
dans votre cas), il serait sortie tout ce que vous avez dit à la méthode. Dans le cas de l'exemple ci-dessus, il s'agirait du membre x.somevalue
.
Si le type du membre ne peut pas être ajouté directement à un ostream
, vous devez également surcharger l'opérateur <<
pour ce type, en utilisant la même méthode que ci-dessus.
C'est l'opérateur de décalage de gauche, pas "l'opérateur de flux". Dans le contexte de Iostreams, c'est soit l'opérateur d'insertion ou d'extraction, mais ce n'est jamais l'opérateur de flux. –
Désolé, oui vous avez raison. C'est exactement ce que j'ai appelé dans ma tête puisque j'ai tendance à ne l'utiliser que pour les flux. Dans ce cas, il s'agit de l'opérateur d'insertion, comme vous le dites, plutôt que d'un opérateur de flux. J'ai mis à jour ma réponse pour supprimer ce bit. –
C'est une fonction infiniment récursive. Et il a eu une upvote! Vous devez aimer le week-end sur SO! –