basic_ostream (Clase)

Esta plantilla de clase describe un objeto que controla la inserción de elementos y objetos codificados en un búfer de flujo con elementos de tipo Elem, también conocidos como char_type, cuyos rasgos de caracteres están determinados por la clase Tr, también conocida como traits_type.

Sintaxis

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

Parámetros

Elem
char_type.

Tr
El carácter traits_type.

Comentarios

La mayoría de las funciones miembro que sobrecargan operador<< son funciones de salida con formato. Siguen el patrón:

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);

Otras dos funciones miembro son funciones de salida sin formato. Siguen el patrón:

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 grupos de funciones llaman a setstate(badbit) si detectan un error al insertar elementos.

Un objeto de clase basic_istream<Elem, Tr> solo almacena un objeto base público virtual de clase basic_ios<Elem, Tr>.

Ejemplo

Vea el ejemplo de basic_ofstream (Clase) para obtener más información sobre los flujos de salida.

Constructores

Constructor Descripción
basic_ostream Construye un objeto basic_ostream.

Funciones miembro

Función de miembro Descripción
flush Vacía el búfer.
put Coloca un carácter en una secuencia.
seekp Restablece la posición en el flujo de salida.
sentry La clase anidada describe un objeto cuya declaración estructura las funciones de salida con y sin formato.
swap Cambia los valores de este objeto basic_ostream por los del objeto basic_ostream proporcionado.
tellp Notifica la posición en el flujo de salida.
write Coloca los caracteres en una secuencia.

Operadores

Operador Descripción
operator= Asigna el valor del parámetro de objeto basic_ostream a este objeto.
operator<< Escribe en la secuencia.

Requisitos

Encabezado:<ostream>

Espacio de nombres: std

basic_ostream::basic_ostream

Construye un objeto basic_ostream.

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

basic_ostream(basic_ostream&& right);

Parámetros

strbuf
Objeto de tipo basic_streambuf.

_Isstd
true si se trata de un flujo estándar; de lo contrario, false.

right
Referencia a un valor R a un objeto de tipo basic_ostream.

Comentarios

El primer constructor inicializa la clase base al llamar a init(strbuf). El segundo constructor inicializa la clase base al llamar a basic_ios::move(right).

Ejemplo

Vea el ejemplo de basic_ofstream::basic_ofstream para obtener más información sobre los flujos de salida.

basic_ostream::flush

Vacía el búfer.

basic_ostream<Elem, Tr>& flush();

Valor devuelto

Referencia al objeto basic_ostream.

Comentarios

Si rdbuf no es un puntero nulo, la función llama a rdbuf>pubsync. Si eso devuelve -1, la función llama a setstate(badbit). Devuelve *this.

Ejemplo

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

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

basic_ostream::operator<<

Escribe en la secuencia.

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
Puntero de función.

strbuf
Puntero a un objeto stream_buf .

val
Elemento que se va a escribir en el flujo.

Valor devuelto

Referencia al objeto basic_ostream.

Comentarios

El encabezado <ostream> también define varios operadores de inserción globales. Para obtener más información, vea operator<<.

La primera función miembro garantiza que una expresión con el formato ostr << endl llame a endl(ostr) y luego devuelva *this. Las funciones segunda y tercera garantizan que los demás manipuladores, como hex, se comporten de forma similar. Las funciones restantes son todas funciones de salida con formato.

La función

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

extrae elementos destrbuf, si strbuf no es un puntero nulo y los inserta. La extracción se detiene al final del archivo o si una extracción inicia una excepción (que se vuelve a iniciar). También se detiene, sin extraer el elemento en cuestión, si se produce un error en una inserción. Si la función no inserta ningún elemento, o si una extracción inicia una excepción, la función llama a setstate(failbit). En cualquier caso, la función devuelve *this.

La función

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

convierte _Val en un campo booleano y lo inserta al llamar a use_facet<num_put<Elem, OutIt>(getloc). put(OutIt(rdbuf), *this, getloc, val). Aquí, OutIt se define como ostreambuf_iterator<Elem, Tr>. La función devuelve *this.

Funciones

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);

convierten val en un campo numérico y lo insertan al llamar a use_facet<num_put<Elem, OutIt>(getloc). put(OutIt(rdbuf), *this, getloc, val). Aquí, OutIt se define como ostreambuf_iterator<Elem, Tr>. La función devuelve *this.

Funciones

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

convierten val en un campo numérico y lo insertan al llamar a use_facet<num_put<Elem, OutIt>(getloc). put(OutIt(rdbuf), *this, getloc, val). Aquí, OutIt se define como ostreambuf_iterator<Elem, Tr>. La función devuelve *this.

Ejemplo

// 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::operator=

Asigna valores del parámetro de objeto basic_ostream proporcionado a este objeto.

basic_ostream& operator=(basic_ostream&& right);

Parámetros

right
Referencia rvalue a un objeto basic_ostream.

Comentarios

El operador miembro llama a swap (right).

basic_ostream::p ut

Coloca un carácter en una secuencia.

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

Parámetros

_Ch
Un carácter.

Valor devuelto

Referencia al objeto basic_ostream.

Comentarios

La función de salida sin formato inserta el elemento _Ch. Devuelve *this.

Ejemplo

// 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

Restablece la posición en el flujo de salida.

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

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

Parámetros

_Pos
Posición en el flujo.

_Off
Desplazamiento en relación con _Way.

_Way
Una de las enumeraciones ios_base::seekdir.

Valor devuelto

Referencia al objeto basic_ostream.

Comentarios

Si fail es false, la primera función miembro llama a newpos =rdbuf->pubseekpos(_Pos), para algunos pos_type objeto temporal newpos. Si fail es False, la segunda función llama a newpos = rdbuf->pubseekoff(_Off, _Way). En cualquier caso, si (off_type)newpos == (off_type)(-1) (se produce un error en la operación de posicionamiento), la función llama a istr.setstate(failbit). Ambas funciones devuelven *this.

Ejemplo

// 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::sentry

La clase anidada describe un objeto cuya declaración estructura las funciones de salida con y sin formato.

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

Comentarios

La clase anidada describe un objeto cuya declaración estructura las funciones de salida con y sin formato. Si ostr.good es true y ostr.tie no es un puntero nulo, el constructor llama a ostr.tie->flush. El constructor almacena el valor devuelto por ostr.good en status. Una llamada posterior a operator bool devuelve este valor almacenado.

Si uncaught_exception devuelve false y flags&unitbuf es distinto de cero, el destructor llama a flush.

basic_ostream::swap

Cambia los valores de este objeto basic_ostream por los del objeto basic_ostream proporcionado.

void swap(basic_ostream& right);

Parámetros

right
Referencia a un objeto basic_ostream.

Comentarios

La función miembro llama a basic_ios::swap(right) para cambiar el contenido de este objeto por el de right.

basic_ostream::tellp

Notifica la posición en el flujo de salida.

pos_type tellp();

Valor devuelto

Posición en el flujo de salida.

Comentarios

Si fail es false, la función miembro devuelve rdbuf->pubseekoff(0, cur,, in). De lo contrario, devuelve pos_type(-1).

Ejemplo

Vea seekp para obtener un ejemplo de uso de tellp.

basic_ostream::write

Coloca caracteres en un flujo.

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

Parámetros

count
Recuento de caracteres que se van a colocar en el flujo.

str
Caracteres que se van a colocar en el flujo.

Valor devuelto

Referencia al objeto basic_ostream.

Comentarios

La función de salida sin formato inserta la secuencia de elementos de conteo , que comienza en str.

Ejemplo

Vea streamsize para obtener un ejemplo de uso de write.

Consulte también

Seguridad para subprocesos en la biblioteca estándar de C++
Programación con iostream
Convenciones de iostreams