2011-08-21 2 views
3

J'ai une classe DateConversion classe date chaîne

class Date { int dd, mm, yyyy}; 

J'ai écrit la règle de 3, et tout ce qui fonctionne. Je veux convertir la date en une chaîne. Ai-je besoin d'un opérateur de conversion string() pour le faire? thx!

Répondre

3

Quand je veux faire une représentation textuelle d'un objet disponible, je l'habitude d'écrire un (public) méthode print() qui prend un std::ostream&. Cela me facilite le test unitaire et expose les données privées sans avoir besoin de faire friend s.

void Date::print(std::ostream& s) const 
{ 
    s << yyyy << "-" << mm << "-" << dd; 
} 

Cela rend l'écriture du flux insertion operator que Jesus Ramos suggested agréable et simple:

std::ostream& operator<<(std::ostream& s, const Date& d) 
{ 
    d.print(s); 
    return s; 
} 

Et si vous (vraiment) voulez un std::string()operator, alors c'est trivial:

Date::operator std::string() const 
{ 
    std::ostringstream oss; 
    print(oss); 
    return oss.str(); 
} 
5
std::ostream& operator<<(std::ostream& s, const Date& d) 
{ 
    s << "Format your date object here"; 
    return s; 
} 

En C++, vous utilisez des flux si vous souhaitez utiliser la fonctionnalité toString().

Ainsi, par exemple, vous pouvez faire

s << mm << "/" << dd << "/" << yyyy; 
+0

thx Jésus, laissez-moi l'essayer – itcplpl

+0

Voulez-vous dire 'ostream' ici? 'std :: stream' est nouveau pour moi. –

+0

@Steve merci, doit avoir fait une faute de frappe quelque chose. –