Ir ao conteúdo
  • Cadastre-se

C++ Estou com dificuldade em modificar saída do cout sem modificar o main


Posts recomendados

Uma solução seria você usar um define e usar uma classe qualquer que sobrecarrega o operador  <<

 

#include <iostream>
#include <sstream>

using namespace std;

#define cout     cout << "iniciando\nOla, Mundo!\nfinalizando\n"; ostringstream str; str

int main()
{
    cout << "Ola, Mundo!" << endl;
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Nao me pergunte como isso funcionou HAHAHA
 

#include <iostream>

namespace nostd {
    
    struct cout_base { };
    
    struct cout {
        bool alive;        
        cout() : alive(true) { std::cout << "Iniciando" << std::endl; }
        cout(cout && rhs) : alive(true) { rhs.alive = false; }
        cout(cout const &) = delete;
        ~cout() { if (alive) std::cout << "Finalizando" << std::endl; }        
        
    };
    
    template <typename T>
    cout operator<< ( cout && o, T const & x ) {
        std::cout << x;
        return std::move ( o );
    }
    
    template <typename T>
    cout operator<< ( cout_base &, T const & x ) {
        return std::move ( cout() << x );
    }
    

    
    cout_base cout;   // like the global std::cout
};

using nostd::cout;

std::ostream& endl ( std::ostream& os ){
    os << std::endl;
    return os;
    
}

int main() {
    cout << "Ola, Mundo!" << endl;
    return 0;
}

Praticamente usei tudo o que você falou, "usando uma sobrecarga do operador <<, ou usando namespaces...". Criando uma classe cout dentro de outro namespace.

O maior problema foi encontrar uma solução para o maldito endl pfff

Isso dai nao é coisa minha nao, foi tirado de varias paginas até chegar nisso a base de provas ssuheusjushe. copia rápido antes que o moderador borre tudo heheh

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

2 horas atrás, dferreira28 disse:

@Benjamin Breeg isso ajudou bastante, mais poderia me explicar melhor como funciona?

 

 

Cara para entender de fato você teria que estudar os fluxos de entrada e saida do c++ e como manipular outras classes que controlam esses fluxos.

 

Basicamente na sua forma básica o operador "<<" le para objetivos os tipos padrão da linguagem (int, float) etc etc.

 
Só que você pode sobrecarregar o operador << para outras classes, o que eu fiz fiu usar um objeto ostringstream da classe stringstream e usar a habilidade que esse objeto tem de formatação da saída usando uma unica string a partir de um buffer de string. Perceba que não usei nenhuma função da classe somente usei o operador << sobrecarregado por ela.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...