Partilhar via


Classe basic_ostream

Esse modelo de classe descreve um objeto que controla a inserção de elementos e objetos codificados em um buffer de fluxo com elementos do tipo Elem, também conhecido como char_type, cujas características de caractere são determinadas pela classe Tr, também conhecida como traits_type.

Sintaxe

template <class Elem, class Tr = char_traits<Elem>>
class basic_ostream : virtual public basic_ios<Elem, Tr>

Parâmetros

Elem
Um char_type.

Tr
O traits_type caractere

Comentários

A maioria das funções membro que sobrecarrega o operator<< é composta por funções de entrada formatadas. Elas seguem o padrão:

iostate state = goodbit;
const sentry ok(*this);

if (ok)
{try
{<convert and insert elements
    accumulate flags in state> }
    catch (...)
{try
{setstate(badbit);

}
    catch (...)
{}
    if ((exceptions()& badbit) != 0)
    throw; }}
width(0);
// Except for operator<<(Elem)
setstate(state);

return (*this);

Duas outras funções membro são funções de saída sem formatação. Elas seguem o padrão:

iostate state = goodbit;
const sentry ok(*this);

if (!ok)
    state |= badbit;
else
{try
{<obtain and insert elements
    accumulate flags in state> }
    catch (...)
{try
{setstate(badbit);

}
    catch (...)
{}
    if ((exceptions()& badbit) != 0)
    throw; }}
setstate(state);

return (*this);

Ambos os grupos de funções chama setstate(badbit) se encontram uma falha durante a inserção de elementos.

Um objeto da classe basic_istream<Elem, Tr> armazena somente um objeto base virtual público da classe basic_ios<Elem, Tr>.

Exemplo

Consulte o exemplo de Classe basic_ifstream para saber mais sobre fluxos de saída.

Construtores

Construtor Descrição
basic_ostream Constrói um objeto basic_ostream.

Funções de membro

Função de membro Descrição
flush Libera o buffer.
put Coloca um caractere em um fluxo.
seekp Redefine a posição no fluxo de saída.
sentry A classe aninhada descreve um objeto cuja declaração estrutura as funções de saída formatadas e as funções de saída não formatadas.
troca Troca os valores desse objeto basic_ostream por aqueles do objeto basic_ostream fornecido.
tellp Relata a posição no fluxo de saída.
write Coloca caracteres em um fluxo.

Operadores

Operador Descrição
operator= Atribui o valor do objeto parâmetro basic_ostream fornecido para esse objeto.
operator<< Grava no fluxo.

Requisitos

Cabeçalho:<ostream>

Namespace: std

basic_ostream::basic_ostream

Constrói um objeto basic_ostream.

explicit basic_ostream(
    basic_streambuf<Elem, Tr>* strbuf,
    bool _Isstd = false);

basic_ostream(basic_ostream&& right);

Parâmetros

strbuf
Um objeto do tipo basic_streambuf.

_Isstd
true se esse for um fluxo padrão; caso contrário, false.

direita
Uma referência rvalue a um objeto do tipo basic_ostream.

Comentários

O primeiro construtor inicializa a classe base chamando init(strbuf). O segundo construtor inicializa a classe base chamando basic_ios::move(right).

Exemplo

Consulte o exemplo de basic_ofstream::basic_ofstream para saber mais sobre fluxos de saída.

basic_ostream::flush

Libera o buffer.

basic_ostream<Elem, Tr>& flush();

Valor de retorno

Uma referência ao objeto basic_ostream.

Comentários

Se rdbuf não for um ponteiro nulo, a função chamará rdbuf->pubsync. Se isso retornar -1, a função chamará setstate( badbit). Retorna *this.

Exemplo

// basic_ostream_flush.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   cout << "test";
   cout.flush();
}
test

basic_ostream::operator<<

Grava no fluxo.

basic_ostream<Elem, Tr>& operator<<(
    basic_ostream<Elem, Tr>& (* Pfn)(basic_ostream<Elem, Tr>&));

basic_ostream<Elem, Tr>& operator<<(
    ios_base& (* Pfn)(ios_base&));

basic_ostream<Elem, Tr>& operator<<(
    basic_ios<Elem, Tr>& (* Pfn)(basic_ios<Elem, Tr>&));

basic_ostream<Elem, Tr>& operator<<(basic_streambuf<Elem, Tr>* strbuf);
basic_ostream<Elem, Tr>& operator<<(bool val);
basic_ostream<Elem, Tr>& operator<<(short val);
basic_ostream<Elem, Tr>& operator<<(unsigned short val);
basic_ostream<Elem, Tr>& operator<<(int __w64  val);
basic_ostream<Elem, Tr>& operator<<(unsigned int __w64  val);
basic_ostream<Elem, Tr>& operator<<(long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long __w64  val);
basic_ostream<Elem, Tr>& operator<<(long long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long long val);
basic_ostream<Elem, Tr>& operator<<(float val);
basic_ostream<Elem, Tr>& operator<<(double val);
basic_ostream<Elem, Tr>& operator<<(long double val);
basic_ostream<Elem, Tr>& operator<<(const void* val);

Parâmetros

Pfn
Um ponteiro de função.

strbuf
Um ponteiro para um objeto stream_buf.

val
Um elemento para gravar no fluxo.

Valor de retorno

Uma referência ao objeto basic_ostream.

Comentários

O cabeçalho <ostream> também define vários operadores de inserção global. Para obter mais informações, consulte operator<<.

A primeira função de membro garante que uma expressão do formulário ostr << endl chame endl(ostr) e, em seguida, retorne *this. A segunda e a terceira funções garantem que outros manipuladores, como hexa, comportem-se de modo semelhante. As funções restantes são todas as funções de saída formatadas.

A função

basic_ostream<Elem, Tr>& operator<<(basic_streambuf<Elem, Tr>* strbuf);

extrai elementos de strbuf, se strbuf não for um ponteiro nulo, e insere-os. A extração para no fim do arquivo ou se uma extração gerar uma exceção (que é gerada novamente). Ela também parará, sem extrair o elemento em questão, se uma inserção falhar. Se a função não inserir nenhum elemento ou se uma extração gerar uma exceção, a função chamará setstate(failbit). Em qualquer caso, a função retorna *this.

A função

basic_ostream<Elem, Tr>& operator<<(bool val);

converte _Val para um campo booliano e o insere chamando use_facet<num_put<Elem, OutIt>(getloc). put(OutIt(rdbuf), *this, getloc, val). Aqui, OutIt é definido como ostreambuf_iterator<Elem, Tr>. A função retorna *this.

As funções

basic_ostream<Elem, Tr>& operator<<(short val);
basic_ostream<Elem, Tr>& operator<<(unsigned short val);
basic_ostream<Elem, Tr>& operator<<(int val);
basic_ostream<Elem, Tr>& operator<<(unsigned int __w64  val);
basic_ostream<Elem, Tr>& operator<<(long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long val);
basic_ostream<Elem, Tr>& operator<<(long long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long long val);
basic_ostream<Elem, Tr>& operator<<(const void* val);

convertem val para um campo numérico e o inserem chamando use_facet<num_put<Elem, OutIt>(getloc). put(OutIt(rdbuf), *this, getloc, val). Aqui, OutIt é definido como ostreambuf_iterator<Elem, Tr>. A função retorna *this.

As funções

basic_ostream<Elem, Tr>& operator<<(float val);
basic_ostream<Elem, Tr>& operator<<(double val);
basic_ostream<Elem, Tr>& operator<<(long double val);

convertem val para um campo numérico e o inserem chamando use_facet<num_put<Elem, OutIt>(getloc). put(OutIt(rdbuf), *this, getloc, val). Aqui, OutIt é definido como ostreambuf_iterator<Elem, Tr>. A função retorna *this.

Exemplo

// basic_ostream_op_write.cpp
// compile with: /EHsc
#include <iostream>
#include <string.h>

using namespace std;

ios_base& hex2( ios_base& ib )
{
   ib.unsetf( ios_base::dec );
   ib.setf( ios_base::hex );
   return ib;
}

basic_ostream<char, char_traits<char> >& somefunc(basic_ostream<char, char_traits<char> > &i)
{
    if (i == cout)
    {
        i << "i is cout" << endl;
    }
    return i;
}

class CTxtStreambuf : public basic_streambuf< char, char_traits< char > >
{
public:
    CTxtStreambuf(char *_pszText)
    {
        pszText = _pszText;
        setg(pszText, pszText, pszText + strlen(pszText));
    };
    char *pszText;
};

int main()
{
    cout << somefunc;
    cout << 21 << endl;

    hex2(cout);
    cout << 21 << endl;

    CTxtStreambuf f("text in streambuf");
    cout << &f << endl;
}

basic_ostream::operador=

Atribui valores para o parâmetro de objeto basic_ostream fornecido para esse objeto.

basic_ostream& operator=(basic_ostream&& right);

Parâmetros

direita
Uma referência rvalue a um objeto basic_ostream.

Comentários

O operador do membro chama (right) de troca.

basic_ostream::p ut

Coloca um caractere em um fluxo.

basic_ostream<Elem, Tr>& put(char_type _Ch);

Parâmetros

_Ch
Um caractere.

Valor de retorno

Uma referência ao objeto basic_ostream.

Comentários

A função de saída não formatada insere o elemento _Ch. Retorna *this.

Exemplo

// basic_ostream_put.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   cout.put( 'v' );
   cout << endl;
   wcout.put( L'l' );
}
v
l

basic_ostream::seekp

Redefine a posição no fluxo de saída.

basic_ostream<Elem, Tr>& seekp(pos_type _Pos);

basic_ostream<Elem, Tr>& seekp(off_type _Off, ios_base::seekdir _Way);

Parâmetros

_Pos
A posição no fluxo.

_Off
O deslocamento em relação a _Way.

_Way
Uma das enumerações de ios_base::seekdir.

Valor de retorno

Uma referência ao objeto basic_ostream.

Comentários

Se fail for false, a primeira função membro chama newpos = rdbuf-> pubseekpos(_Pos), para algum pos_type objeto newpostemporário . Se fail for false, a segunda função chamará newpos = rdbuf- >pubseekoff(_Off, _Way). Em ambos os casos, se (off_type)newpos == (off_type)(-1) (a operação de posicionamento falhar), a função chamará istr.setstate(failbit). Ambas as funções retornam *this.

Exemplo

// basic_ostream_seekp.cpp
// compile with: /EHsc
#include <fstream>
#include <iostream>

int main()
{
    using namespace std;
    ofstream x("basic_ostream_seekp.txt");
    streamoff i = x.tellp();
    cout << i << endl;
    x << "testing";
    i = x.tellp();
    cout << i << endl;
    x.seekp(2);   // Put char in third char position in file
    x << " ";

    x.seekp(2, ios::end);   // Put char two after end of file
    x << "z";
}
0
7

basic_ostream::sentinela

A classe aninhada descreve um objeto cuja declaração estrutura as funções de saída formatadas e as funções de saída não formatadas.

class sentinela { public: explicit sentinela(basic_ostream<Elem, Tr>& _Ostr); operador bool() const; ~sentinela(); };

Comentários

A classe aninhada descreve um objeto cuja declaração estrutura as funções de saída formatadas e as funções de saída não formatadas. Se ostr.good for true e ostr.tie não for um ponteiro nulo, o construtor chama ostr.tie->flush. O construtor então armazena o valor retornado por ostr.good em status. Uma chamada posterior para operator bool entrega esse valor armazenado.

Se uncaught_exception returns false and flags & unitbuf for diferente de zero, o destruidor chamará flush.

basic_ostream::swap

Troca os valores desse basic_ostream objeto pelo valores do basic_ostream fornecido.

void swap(basic_ostream& right);

Parâmetros

direita
Uma referência a um objeto basic_ostream.

Comentários

As função de membro chama basic_ios::swap(right) para trocar o conteúdo desse objeto pelo conteúdo de right.

basic_ostream::tellp

Relata a posição no fluxo de saída.

pos_type tellp();

Valor de retorno

Posição no fluxo de saída.

Comentários

Se fail for false, a função membro retornará rdbuf-> pubseekoff(0, cur, in). Caso contrário, retornará pos_type(-1).

Exemplo

Consulte seekp para obter um exemplo usando tellp.

basic_ostream::escrever

Coloque caracteres em um fluxo.

basic_ostream<Elem, Tr>& write(const char_type* str, streamsize count);

Parâmetros

count
Contagem de caracteres a colocar no fluxo.

str
Caracteres a colocar no fluxo.

Valor de retorno

Uma referência ao objeto basic_ostream.

Comentários

A função de saída não formatada insere a sequência de elementos count, começando em str.

Exemplo

Consulte streamsize para obter um exemplo usando write.

Confira também

Acesso Thread-Safe na Biblioteca Padrão C++
Programação de iostream
Convenções de iostreams