2010-06-05 4 views

Répondre

7

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)

+19

C'est une fonction infiniment récursive. Et il a eu une upvote! Vous devez aimer le week-end sur SO! –

55

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; 
} 
+0

Cela afficherait la valeur du constructeur '10'? –

+1

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. –

+0

Cela ne devrait-il pas être 'const myclass & m' au lieu de' myclass const & m'? – Nubcake

17

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.

+4

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. –

+1

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. –