2010-06-21 27 views
6

Como en, ¿el operador >> debe coincidir con el operador < <?¿Debe formatear el operador << para las clases?

bases de datos ejemplo:

Si el operador >> lee en algo con el siguiente formato:

2 
Joe 500 20 1 
Bob 250 30 0 

caso de que el operador < < salida que? O algo como esto:

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

Y luego tienen una función writeFile() por separado?

Sé que cualquiera funcionaría, pero ¿cuál es el "estándar aceptado"?

Respuesta

7

Si usted tiene una sobrecarga istream operator>> para un tipo que lee datos en un formato particular, a continuación, si se implementa una ostream operator<< sobrecarga para el mismo tipo, debe de salida en el mismo formato (de lo contrario, podría llegar a ser muy confuso)

3

Este tipo de sobrecarga del operador es IMO un gran uso indebido y una idea errónea. Usa la sobrecarga donde realmente tenga sentido.

Para depuración, tenga toString() y anule < < para llamarlo. No anule >> en absoluto.

>> y << generalmente sirven para enviar datos serializados a las transmisiones, no para la comunicación con el usuario.

Mis 2 céntimos de euro.

+2

No estoy de acuerdo: si tiene la intención de leer o escribir datos de una transmisión, la sobrecarga de los "operadores de transmisión" es directa e idiomática. –

+0

Tiene razón, estaba agregando eso a mi respuesta cuando estaba escribiendo esto :) –

0

Ambos o independientes unos de otros, según su voluntad, puede sobrecargarlos.

+1

Creo que OP lo sabe. Él pregunta si es una buena idea hacerlo. Por ejemplo, puede sobrecargar &&, pero en general debe evitar hacerlo. –

+0

@Billy ya, estás en lo correcto. Pero anular << siempre es bueno para una comprobación frecuente (cuando está codificando). – prabhakaran