2010-06-21 11 views
6

Comme dans, est-ce que l'opérateur >> doit correspondre à l'opérateur < <?Doit-on formater l'opérateur << pour les classes?

Base de données Exemple:

Si l'opérateur >> lit quelque chose du format suivant:

2 
Joe 500 20 1 
Bob 250 30 0 

devrait l'opérateur < < sortie qui? Ou quelque chose comme ceci:

Record: 1/2 
Name: Joe 
Balance: 500 
Transactions: 20 
Premium Account: Yes 

Et puis avoir une fonction writeFile() distincte?

Je sais que cela fonctionnerait, mais quelle est la "norme acceptée"?

Répondre

7

Si vous avez un istream operator>> surcharge pour un type qui lit les données dans un format particulier, alors si vous implémentez un ostream operator<< surcharge pour le même type, il doit générer dans le même format (sinon, il pourrait être assez déroutant).

3

Ce type de surcharge de l'opérateur est un gros abus et une idée fausse. Utilisez la surcharge là où c'est vraiment logique. À des fins de débogage, avez toString() et remplacez < < pour l'appeler comme

N'annulez pas >> du tout.

>> et << servent généralement à l'envoi de données sérialisées à des flux, et non pour la communication avec l'utilisateur.

Mes 2 eurocents.

+2

Je ne suis pas d'accord: si vous avez l'intention de lire ou d'écrire des données à partir d'un flux, surcharger les "opérateurs de flux" est à la fois simple et idiomatique. –

+0

Vous avez raison - j'ajoutais cela à ma réponse lorsque vous écriviez ceci :) –

0

Les deux ou indépendants l'un de l'autre, selon votre volonté, vous pouvez les surcharger.

+1

Je pense que l'OP sait cela. Il demande si c'est une bonne idée de le faire. Par exemple, vous pouvez surcharger && mais en général vous devriez éviter de le faire. –

+0

@Billy ya, vous avez raison. Mais «overriding» est toujours bon pour une vérification fréquente (lorsque vous codez). – prabhakaran