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 newpos
temporá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