Les types primitifs étant POD, il y a une différence entre laisser le compilo les "initialiser" (en fait ne rien faire) et appeler explicitement leur constructeur par défaut. L'appel explicite les initialisera à zéro.

Citation Envoyé par Ehonn Voir le message
Citation Envoyé par Boumbata Voir le message
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
void MyObject::afficher_attribut_int() const // ATTENTION: on n'oublie pas le mot-clef "const" ^^
{
     std::cout << "Attribut_int = " << m_int_attribut << std::endl;
}
Généralement on surcharge l'opérateur << entre un std::ostream et le type. C'est une fonction libre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
std::ostream & operator<<(std::ostream & o, MyObject const & a)
{
    o << "Attribut_int = " << a.m_int_attribut;
    return o;
}
En fait, je serais plutôt partisan de faire les deux, ce qui évite d'avoir à déclarer l'opérateur en friend pour pas grand-chose:
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
void MyObject::afficher(std::ostream& output) const // ATTENTION: on n'oublie pas le mot-clef "const" ^^
{
     output << "Attribut_int = " << m_int_attribut << std::endl;
}
 
std::ostream & operator<<(std::ostream & o, MyObject const & a)
{
    a.afficher(o);
    return o;
}