2013-02-17 5 views
0

donc je suis en train de coder mon devoir de devoir C++ et il y a une partie finale où il veut que nous remplacions la méthode de sortie formatée (toString) par un opérateur de sortie/insertion surchargé. Pour être honnête à 100%, je n'ai aucune idée de ce qu'il veut dire par là. J'ai cherché autour d'un peu et trouvé des exemples de codes en utilisant un opérateur d'insertion surchargé, mais je n'arrive pas à trouver comment l'incorporer dans mon code. Bien que je pense que je peux regarder au mauvais endroit. Mon toString est la suivante:Opérateur de sortie surchargé C++

string Movie::toString() const { 
    ostringstream oS; 
    oS << "\n\n====================== Movie Information\n" 
    << "\n    Movie Title:\t" << title << " (" << releaseYear << ")" 
    << "\n US Rank & Box Office:\t" << usRank << "\t$" << usBoxOffice 
    << "\nNon-US Rank & Box Office:\t" << nonUSRank << "\t$" << nonUSBoxOffice 
    << "\n World Rank & Box Office:\t" << worldRank << "\t$" << worldBoxOffice 
    << "\n"; 
    return oS.str(); 
} 

Comme je l'ai mentionné, je ne suis pas sûr de ce que « surcharge » des moyens, donc si pour une raison quelconque cela ne suffit pas d'informations pour vous aider à me le problème directement, alors pouvez vous me donnez une brève description de ce qu'il peut vouloir dire en remplaçant la sortie actuelle par un opérateur de sortie surchargé. Merci

edit: C'est la question suivante que j'ai. https://stackoverflow.com/questions/14924621/c-overloaded-output-operator-cont

+0

Cette question publiée il y a quelques minutes a un exemple de ce que vous référez à: http://stackoverflow.com/questions/14924007/overloading-with-duplicate-symbol-linking-error – Mat

+2

Avez-vous essayé de regarder up "surcharge" dans Wikipedia? –

+0

Je l'ai fait en fait.J'espérais une explication secondaire. –

Répondre

3

Pour surcharger une fonction, il faut fournir d'autres fonctions avec le même nom mais différents types de paramètres. Les opérateurs peuvent également être surchargés. De nombreux opérateurs ont une fonction correspondante qui peut être surchargée appelée operator??, où ?? est l'opérateur lui-même. Par exemple, si vous avez deux objets x et y de type de classe T, vous pouvez surcharger operator+. La surcharge d'un opérateur vous permet de donner un sens à l'utilisation de cet opérateur avec le type. Alors maintenant, vous pouvez faire x + y.

L'opérateur d'insertion de flux est <<. C'est ce que vous utilisez quand vous faites std::cin << "hello"; - il insère dans le flux. Cet opérateur peut également être surchargé, tout comme + a été surchargé ci-dessus. La fonction que vous devez surcharger s'appelle operator<<.

Il existe deux façons de surcharger un opérateur binaire comme << (binaire car il faut deux opérandes, un sur le côté gauche et un sur le côté droit, left << right). On doit en faire un membre du type left et lui donner un seul paramètre du type right. L'autre est d'en faire une fonction non-membre avec deux paramètres, un type left et un autre type right. Puisque le type de votre left sera std::ostream, vous ne pouvez pas modifier la classe (parce qu'elle est fournie par la norme), donc vous devrez utiliser l'option deux.

donc votre fonction libre doit ressembler à ceci:

std::ostream& operator<<(std::ostream& os, const Movie& movie) { 
    // Insert everything you want into `os` 
    return os; 
} 

Maintenant, cette fonction sera appelée à chaque fois que vous faites << avec un std::ostream à gauche et à droite Movie.

+0

Je comprends comment l'opérateur est surchargé maintenant, et les façons dont il peut être utilisé, mais toujours pas complètement sûr pourquoi vous l'utilisez. Merci pour la réponse. Je vais étudier à ce sujet plus. –

+0

Bien que j'ai une autre question si vous le souhaitez. J'ai aussi une fonction getMovie où il choisit un film utilisant et index. Aurais-je surcharger la fonction de la même manière que nous l'avons fait avec tostring. –

+0

@JasonSchayer Vous l'utilisez parce que vous voulez pouvoir faire 'Movie m; std :: cout << m; '. Cela imprimera le contenu du film 'm' dans le formulaire que vous spécifiez. Tout comme faire 'std :: cout << 10;' affichera 'int' 10. Maintenant, vous pouvez imprimer un' Movie'! –

2

Je pense que votre tâche est censée être écrire un operator << surchargé qui vous permet d'écrire la représentation de chaîne de votre objet à un flux de sortie:

std::ostream& operator <<(std::ostream& os, const Movie& movie) { 
    os << "\n\n====================== Movie Information\n" 
     << "\n    Movie Title:\t" << movie.title << " (" << movie.releaseYear << ")" 
     << "\n US Rank & Box Office:\t" << movie.usRank << "\t$" << movie.usBoxOffice 
     << "\nNon-US Rank & Box Office:\t" << movie.nonUSRank << "\t$" << movie.nonUSBoxOffice 
     << "\n World Rank & Box Office:\t" << movie.worldRank << "\t$" << movie.worldBoxOffice 
     << "\n"; 
    return os; 
} 

et que vous utilisez cet opérateur que vous pourriez faire avec types intégrés:

Movie m; 

// Do something with m 

cout << m;  // Write m to the standard output 
+0

Merci, vous et sftrabbit aidé beaucoup –

Questions connexes