terça-feira, 1 de março de 2011

Dicas de Programação: Como imprimir uma classe em modo texto no C++?

Para imprimir uma classe em C++ como texto, você deve usar um método friend que reescreve o operador << onde este utiliza o objeto standard de saida (o std:ostream).

Complicado, não? Mas é bem simples.

Primeiro a gente declara a interface do método friend na classe:

#include <iostream>
class MinhaClasse {
private:
char* texto;
public:
MinhaClasse(char* texto);
friend std::ostream& operator<<(std::ostream& out, MinhaClasse* f);
};

Explicações:

Método friend é declarado dentro da classe podendo acessar as variáveis privadas desta, porém este método não pertence ao objeto (ou seja, não é chamado através do objeto).
A classe std::ostream é a classe do objeto std::cout.
Operadores podem ser reescrito através da palavra especial "operator" mais o simbolo que ele é representado, por exemplo, eu quero reescrever o operador de soma em uma determinada classe:
...
Retorno Classe::operator+(Parametro& param);
...


Ops... Voltando a implementação, a gente implementa este método declarado na interface:

...
std::ostream& operator<<(std::ostream& out, MinhaClasse* f) {
out << f->texto;
return out;
}
...

Agora, a gente pode simplesmente fazer assim para imprimir a classe:

...
MinhaClasse* a = new MinhaClasse("texto");
std::cout << a << std::endl;
...

Tomara que isso ajude alguém... :)

Nenhum comentário: