98 votes

Comment puis-je utiliser cout << myclass

myclass est une classe C++ écrite par moi et quand j'écris :

myclass x;
cout << x;

Comment puis-je produire 10 ou 20.2 comme un integer ou un float valeur ?

113voto

Jerry Coffin Points 237758

Généralement en surchargeant 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;
}

27voto

Rich Adams Points 10378

Vous devez surcharger le << opérateur,

std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
      os << obj.somevalue;
      return os;
}

Alors quand vous le faites cout << x (donde x est de type myclass dans votre cas), il produira ce que vous lui avez demandé dans la méthode. Dans le cas de l'exemple ci-dessus, il s'agirait de la méthode x.somevalue membre.

Si le type du membre ne peut pas être ajouté directement à un membre de l'Union européenne, il est possible d'ajouter un membre de l'Union européenne. ostream vous devrez alors surcharger la fonction << pour ce type également, en utilisant la même méthode que ci-dessus.

17voto

Tristram Gräbener Points 5566

C'est très facile, il suffit de mettre en œuvre :

std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
   os << foo.var;
   return os;
}

Vous devez retourner une référence à os afin de chaîner la sortie (cout << foo << 42 << endl).

8voto

Guillaume Racicot Points 1106

Même si les autres réponses fournissent un code correct, il est également recommandé d'utiliser une fonction amie cachée pour implémenter la fonction operator<< . Les fonctions amies cachées ont une portée plus limitée, ce qui permet une compilation plus rapide. Comme il y a moins de surcharges qui encombrent l'espace de nom, le compilateur a moins de recherches à faire.

struct myclass { 
    int i;

    friend auto operator<<(std::ostream& os, myclass const& m) -> std::ostream& { 
        return os << m.i;
    }
};

int main() { 
    auto const x = myclass{10};
    std::cout << x;

    return 0;
}

-3voto

Emil Mocan Points 55

Alternatif :

struct myclass { 
    int i;
    inline operator int() const 
    {
        return i; 
    }
};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X