0Pricing
C++ Academy · Aula

Operadores de inserção e extração de fluxos

Faça com que os seus tipos funcionem com std::cout através de >

Operadores de inserção e extração de fluxos é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

Por que sobrecarregar << e >>

Ensine seus tipos a interoperar com std::cout e std::cin sobrecarregando os operadores de fluxo.

O operador de inserção <<

Defina-o como uma função livre que receba um fluxo de saída por referência. Retorne o fluxo para permitir o encadeamento.

struct Point { int x, y; };

std::ostream& operator<<(std::ostream& os, const Point& p) {
    return os << "(" << p.x << ", " << p.y << ")";
}

Point p{3, 4};
std::cout << p << "\n";   // (3, 4)

Por que uma função livre?

Se você o escrevesse como membro, o operando esquerdo teria de ser um Point — o que é impossível, pois precisamos de std::ostream à esquerda. Funções livres permitem qualquer ordem dos operandos.

O operador de extração &gt;&gt;

Defina-o para fazer leituras a partir de fluxos de entrada. Valide os dados e defina o failbit em caso de falha.

std::istream& operator>>(std::istream& is, Point& p) {
    char open, comma, close;
    is >> open >> p.x >> comma >> p.y >> close;
    if (open != '(' || comma != ',' || close != ')')
        is.setstate(std::ios::failbit);
    return is;
}

Definindo o estado de falha do fluxo

Se a análise falhar, chame is.setstate(std::ios::failbit). O chamador pode detectar a falha com !is ou is.fail().

Declarações friend

Se o operador precisar acessar membros privados, declare-o como friend dentro da classe.

class Point {
    int x_, y_;
public:
    friend std::ostream& operator<<(std::ostream& os, const Point& p);
};

Tipos de fluxo parametrizados

Para obter a maior portabilidade possível, use o tipo de caractere como parâmetro de tipo. Isso é útil para fluxos de caracteres largos.

template <typename CharT>
std::basic_ostream<CharT>& operator<<(
    std::basic_ostream<CharT>& os, const Point& p) {
    return os << "(" << p.x << ", " << p.y << ")";
}

Encadeamento

Retornar o fluxo permite que os usuários encadeiem operações.

std::cout << "Result: " << point << ", distance: " << dist;

Formatação personalizada

Use std::ios::fmtflags ou std::format, do C++20, para formatação avançada. Os fluxos são mais simples, mas mais difíceis de localizar.

Saída no estilo JSON

Você pode combinar diferentes opções de formatação no seu operador. Para saídas complexas, escreva funções auxiliares.

Lendo várias linhas

Use std::getline para fazer leituras baseadas em linhas e, em seguida, analise os dados com um fluxo de strings — isso mantém seu operator>> simples.

Dica de desempenho

Para registro de dados com vazão muito alta, prefira bibliotecas dedicadas (spdlog, fmt) — elas têm desempenho significativamente superior ao dos fluxos.

Verificação rápida

Por que operator<< para um tipo definido pelo usuário é definido como uma função livre, e não como membro?

Resumo

Sobrecarregue operator<< e operator>> como funções livres que recebam o fluxo por referência. Retorne o fluxo para permitir o encadeamento. Defina o failbit em caso de erros de análise. Use friend quando for necessário acessar membros privados.

Perguntas Frequentes

A aula “Operadores de inserção e extração de fluxos” é grátis?

Sim — o texto completo de “Operadores de inserção e extração de fluxos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Operadores de inserção e extração de fluxos”?

Faça com que os seus tipos funcionem com std::cout através de > Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Operadores de inserção e extração de fluxos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Operadores aritméticos e de comparação
  2. Operadores de inserção e extração de fluxos
  3. Operadores de subscrito e chamada de função
  4. Operador de comparação de três vias no C++20
← Voltar para C++ Academy