Question

Pour utiliser Cout comme tel: std :: Cout << myObject, pourquoi dois-je passer un objet ostream? Je pensais que c'était un paramètre implicite.

ostream &operator<<(ostream &out, const myClass &o) {

    out << o.fname << " " << o.lname;
    return out;
}

Merci

Était-ce utile?

La solution

Vous n'êtes pas une autre fonction ajoutez membre à ostream, étant donné qu'il faudrait redéfinir la classe. Vous ne pouvez pas ajouter à myClass, depuis le ostream va d'abord. La seule chose que vous pouvez faire est d'ajouter une surcharge à une fonction indépendante, qui est ce que vous faites dans l'exemple.

Autres conseils

Seulement si elle est fonction de membre de la classe qui serait autrement le premier argument. Ainsi, il serait:

class ostream {
    ...
    ostream &operator << (const myClass &o);
    ...
};

Depuis ostream a été écrit bien avant votre classe, vous voyez le problème de l'obtention de votre classe là-dedans. Ainsi, nous devons mettre en œuvre l'opérateur en fonction autoportant:

(return type) operator << ( (left hand side), (right hand side) );

Lorsque les opérateurs sont mises en œuvre en tant que membres-fonctions des classes, le côté gauche est this, et l'argument devient le côté droit. (Pour les opérateurs binaires - les opérateurs unaires fonctionnent de la même.)

Parce que vous Surcharger une fonction libre, et non une fonction membre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top