Anda di halaman 1dari 58

http://es.wikipedia.org/wiki/Stdio.

h
http://en.wikipedia.org/wiki/Conio.h
http://codigoc.org/700-define-en-c-como-si-y-como-no

stdio.h
stdio.h, que significa "standard input-output header" (cabecera estandar E/S), es la biblioteca
estndar del lenguaje de programacin C, el archivo de cabecera que contiene las definiciones
demacros, las constantes, las declaraciones de funciones y la definicin de tipos usados por varias
operaciones estndar de entrada y salida. Por motivos de compatibilidad, el lenguaje de
programacin C++ (derivado de C) tambin tiene su propia implementacin de estas funciones, que son
declaradas con el archivo de cabecera cstdio.
Las funciones declaradas en stdio.h son sumamente populares.
ndice
[ocultar]

1 Ejemplo de uso

2 Funciones miembro

3 Constantes miembro

4 Variables miembro

5 Tipos miembro

6 Vase tambin

Ejemplo de uso[editar editar cdigo]


En C y sus derivados, todas las funciones son declaradas en archivos de cabecera. As, los
programadores tienen que incluir el archivo de cabecera stdio.h dentro del cdigo fuente para poder
utilizar las funciones que estn declaradas. Nota: el compilador diferencia las mayusculas entre las
minusculas.

#include <stdio.h>
int main(void)
{
int ch;
while ((ch = getchar()) != EOF)
putchar(ch);
putchar('\n');
return 0;
}
El programa lee todas las entradas desde la entrada estndar y las muestra en la salida estndar, lnea
a lnea.

Funciones miembro[editar editar cdigo]


Las funciones declaradas en stdio.h pueden clasificarse en dos categoras: funciones de
manipulacin de ficheros y funciones de manipulacin de entradas y salidas.

Nombre

Descripcin

Funciones de manipulacin de ficheros

fclose

Cierra un fichero a travs de su puntero.

fopen,freopen,fdopen

Abre un fichero para lectura, para escritura/reescritura o


para adicin.

remove

Elimina un fichero.

rename

Cambia al fichero de nombre.

rewind

Coloca el indicador de posicin de fichero para el stream


apuntado por stream al comienzo del fichero.

tmpfile

Crea y abre un fichero temporal que es borrado cuando


cerramos con la funcin fclose().

Funciones de manipulacin de entradas y salidas.

clearerr

Despeja los indicadores de final de fichero y de posicin de


fichero para el stream apuntado por stream al comienzo del
fichero.

feof

Comprueba el indicador de final de fichero.

ferror

Comprueba el indicador de errores.

fflush

Si stream apunta a un stream de salida o de actualizacin


cuya operacin ms reciente no era de entrada, la
funcin fflush enva cualquier dato an sin escribir al
entorno local o a ser escrito en el fichero; si no, entonces el
comportamiento no est definido. Si stream es un puntero
nulo, la funcin fflush realiza el despeje para todos
los streams cuyo comportamiento est descrito
anteriormente.

fgetpos

Devuelve la posicin actual del fichero.

fgetc

Devuelve un carcter de un fichero.

fgets

Consigue una cadena de caracteres de un fichero.

fputc

Escribe un carcter en un fichero.

fputs

Escribe una cadena de caracteres en un fichero.

ftell

Devuelve la posicin actual del fichero como nmero de


bytes.

fseek

Sita el puntero de un fichero en una posicin aleatoria.

fsetpos

Cambia la posicin actual de un fichero.

fread

lee diferentes tamaos de datos de un fichero.

fwrite

Enva, desde el array apuntado por puntero,


hasta nmemb de elementos cuyo tamao es especificado
por tamao. El indicador de posicin de ficheros es
avanzado por el nmero de caracteres escritos
correctamente. Si existe un error, el valor resultante del
indicador de posicin de ficheros es indeterminado.

getc

Devuelve un carcter desde un fichero.

getchar

Igual que getc.

gets

Lee caracteres de entrada hasta que encuentra un salto de


lnea, y los almacena en un nico argumento.

printf,fprintf,sprint
f
Usados para imprimir salidas de datos.
snprintf

vprintf

Tambin utilizado para imprimir salidas.

perror

Escribe un mensaje de error a stderr.

putc

Devuelve un carcter de un fichero.

putchar,fputchar

Igual que putc(stdout).

scanf,fscanf,sscanf

Utilizado para introducir entradas.

vfscanf,vscanf,vsscan
Tambin utilizado para introducir entradas.
f

setbuf

Esta funcin es equivalente a la funcin setvbuf pasando


los valores _IOFBF para modo y BUFSIZ para tamao, o (si
acumulador es un puntero nulo), con el valor _IONBF para
modo.

setvbuf

Slo puede ser usada despus de que el stream apuntado


por stream ha sido asociado con un fichero abierto y antes
de otra operacin cualquiera es llevada acabo al stream. El
argumento modo determina cmo stream ser almacenado
segn lo siguiente: _IOFBF ocasiona la entrada/salida a ser
completamente almacenado; _IOLBF ocasiona la
entrada/salida a almacenar por lneas; _IONBF ocasiona la
entrada/salida a no ser almacenado. Si acumulador no es
un puntero nulo, el array al que es apuntado puede ser
usado en vez de la acumulacin adjudicada por la funcin
setvbuf. El argumento tamao especifica el tamao del
array.

tmpnam

Genera una cadena de caracteres que es un nombre vlido


para ficheros y que no es igual al nombre de un fichero
existente. La funcin tmpnam genera una cadena diferente
cada vez que es llamada, hasta un mximo de TMP_MAX
veces. Si la funcin es llamada ms veces que TMP_MAX,
entonces el comportamiento de la funcin est definido
segn la implementacin del compilador.

ungetc

puts

Imprime una de cadena de caracteres.

Constantes miembro[editar editar cdigo]


Las constantes definidas en el fichero cabecera stdio.h son:

Nombre

Descripcin

EOF

Entero negativo (int) usado para indicar "fin de fichero".

BUFSIZ

Entero que indica el tamao del buffer utilizado por la


funcin setbuf().

FILENAME_MA
X

Tamao mximo de la cadena de caracteres que contienen el nombre


de un fichero para ser abierto

FOPEN_MAX

Nmero mximo de ficheros que pueden estar abiertos


simultneamente.

_IOFBF

Abreviatura de input/output fully buffered (buffer entrada/salida


totalmente lleno); es un entero que se puede pasar como parmetro de
la funcin setvbuf() para requerirbloqueo del buffer en la entrada y
salida del stream abierto.

_IOLBF

Abreviatura de input/output line buffered (...??); es un entero que se


puede pasar como parametro a la funcin setvbuf() para requerir line
buffered (??) en la entrada y salida del stream abierto.

_IONBF

Abreviatura de "input/output not buffered" (entrada/salida sin buffer);


es un entero que se puede pasar como parametro a la
funcin setvbuf() para requerir que la entrada salida del stream
abierto funcione sin buffer.

L_tmpnam

Tamao de la cadena de caractres con la longitud suficiente para


almacenar un nombre de fichero temporal generado por la
funcin tmpnam().

NULL

Macro que representa la constante puntero nulo; representa un valor


de puntero que no apunta a ninguna direccin vlida de objeto alguno
en memoria.

SEEK_CUR

Entero que se puede pasar como parmetro a la funcin fseek() para

indicar posicionamiento relativo a la posicin actual del fichero.

SEEK_END

Entero que se puede pasar como parmetro a la funcin fseek() para


indicar posicionamiento relativo al final del fichero.

SEEK_SET

Entero que se puede pasar como parmetro a la funcin fseek() para


indicar posicionamiento relativo al inicio del fichero.

TMP_MAX

El nmero mximo de nombres de ficheros nicos generables por la


funcin tmpnam().

Variables miembro[editar editar cdigo]


El fichero de cabecera stdio.h define las siguientes variables:

Nombr
e

Descripcin

stdin

Puntero a FILE que referencia la entrada estndar, normalmente el teclado.

stdout

Puntero a FILE que referencia la salida estndar, normalmente el monitor.

stderr

Puntero a FILE que referencia la salida de error estndar, normalmente el


monitor.

Tipos miembro[editar editar cdigo]


Los tipos de datos definidos en el fichero de cabecera stdio.h son:

FILE - estructura que contiene informacin sobre el fichero o stream (flujo) de texto necesario
para realizar las operaciones de entrada/salida sobre l. incluye:

posicin actual de stream

indicador de fin de fichero (EOF)

indicador de error

puntero al buffer del stream

fpos_t - tipo no-array capaz de identificar unvocamente la posicin de cada byte en un


archivo

size_t - tipo entero sin signo (positivo); es el tipo devuelto por el operador sizeof

conio.h
From Wikipedia, the free encyclopedia

"Conio" redirects here. For the profanity, see coo on Wiktionary.


conio.h is a C header file used mostly by MS-DOS compilers to provide console input/output.[1] It is not
described in The C Programming Language book, and it is not part of the C standard library, ISO C nor is
it defined by POSIX.
This header declares several useful library functions for performing "console input and output" from a
program. Most C compilers that target DOS, Windows 3.x, Phar Lap, DOSX, OS/2, orWin32[2] have this
header and supply the associated library functions in the default C library. Most C compilers that
target UNIX and Linux do not have this header and do not supply the library functions. Some embedded
systems use a conio-compatible library.[3]
The library functions declared by conio.h vary somewhat from compiler to compiler. As originally
implemented in Lattice C, the various functions mapped directly to the first few DOS int 21h functions.
The library supplied with Borland's Turbo C did not use the DOS API but instead accessed video RAM
directly for output and used BIOS interrupt calls. This library also has additional functions inspired from
the successful Turbo Pascal one.
Compilers that targeted non-DOS operating systems, such as Linux[citation needed], Win32 and OS/2, provided
different implementations of these functions.[citation needed] The version done by DJ Delorie for
the GO32 extender is particularly extensive.[4] Another example is SyncTERM's ciolib. It is common to
include curses.h instead of conio.h, if a program is compiled on a non-DOS operating system.

Member functions

kbhit - Determines if a keyboard key was pressed.

getch - Reads a character directly from the console without buffer, and without echo.

getche - Reads a character directly from the console without buffer, but with echo.

ungetch - Puts the character c back into the keyboard buffers.

cgets - Reads a string directly from the console.

cscanf - Reads formatted values directly from the console.

putch - Writes a character directly to the console.

cputs - Writes a string directly to the console.

cprintf - Formats values and writes them directly to the console.

clrscr - Clears the screen.

Compilers provided later than 1989 have prepended an _ to the names, to comply with the requisites of
the ANSI C Standard.

References[edit]
1.

Jump up^ Schildt, Herbert (1995). C: The Complete Reference (3rd ed.). Berkeley, Calif.:
Osborne McGraw-Hill. p. 288. ISBN 0-07-882101-0. "For DOS-compatible compilers, the direct
console I/O functions generally use the CONIO.H header file."

2.

Jump up^ "Console and Port I/O in MSDN".

3.

Jump up^ "MicroVGA conio Text User Interface Library".

4.

Jump up^ "DJGPP C Library Reference - conio".

math.h

math.h es un archivo de cabecera de la biblioteca estndar del lenguaje de programacin C diseado


para operaciones matemticas bsicas. Muchas de sus funciones incluyen el uso de nmeros en coma
flotante. C++ tambin implementa estas funciones por razones de compatibilidad y las declara en la
cabecera cmath.
Una nota importante: si se est programando en C/C++ bajo Gnu/Linux, y se utiliza uno de los
compiladores nativos de este sistema operativo (gcc o g++), es necesario incluir, al compilar, la opcin
-lm, dado que, de lo contrario, el compilador generar un error. Por ejemplo, si tenemos un fichero
fuente con funciones de la biblioteca matemtica, llamado mi_fich_fuente_math.c, para compilarlo ser
necesario dar la orden siguiente en la consola de comandos (respectiva al intrprete):
$ gcc mi_fich_fuente_math.c -lm -o <nombre_del_ejecutable>
Esto, asimismo, no es necesario si se programa en C/C++ bajo Windows utilizando la herramienta
grfica MS Visual C++.
Todas las funciones en las que participan ngulos toman y devuelven radianes.

Funciones miembro anteriores al C++[editar editar cdigo]


Nombre

Descripcin

acos

arcocoseno

asin

arcoseno

atan

arcotangente

atan2

arcotangente de dos parmetros

floor

menor entero no menor que el parmetro

cos

coseno

cosh

coseno hiperblico

exp(double x)

funcin exponencial, computa ex

fabs

valor absoluto

ceil

mayor entero no mayor que el parmetro

fmod

residuo de la divisin de flotantes

frexp

fracciona y eleva al cuadrado.

ldexp

tamao del exponente de un valor en punto flotante

log

logaritmo natural

log10

logaritmo en base 10

modf

obtiene un valor en punto flotante ntegro y en partes

pow(x,y)

eleva un valor dado a un exponente, xy

sin

seno

sinh

seno hiperblico

sqrt

raz cuadrada

tan

tangente

tanh

tangente hiperblica

<cmath> (math.h)
C numerics library

Header <cmath> declares a set of functions to compute common mathematical


operations and transformations:

Functions

Trigonometric functions

cos
Compute cosine

(function )

sin
Compute sine

(function )

tan
Compute tangent

(function )

acos
Compute arc cosine

(function )

asin
Compute arc sine

(function )

atan
Compute arc tangent

(function )

atan2
Compute arc tangent with two parameters

(function )

Hyperbolic functions

cosh
Compute hyperbolic cosine

(function )

sinh
Compute hyperbolic sine

(function )

tanh
Compute hyperbolic tangent

(function )

acosh
Compute arc hyperbolic cosine

(function )

asinh
Compute arc hyperbolic sine

(function )

atanh
Compute arc hyperbolic tangent

(function )

Exponential and logarithmic functions

exp
Compute exponential function

(function )

frexp
Get significand and exponent

(function )

ldexp
Generate value from significand and exponent
log
Compute natural logarithm

(function )

log10
Compute common logarithm
modf

(function )

(function )

Break into fractional and integral parts

(function )

exp2
Compute binary exponential function

(function )

expm1
Compute exponential minus one

(function )

ilogb
Integer binary logarithm

(function )

log1p
Compute logarithm plus one

(function )

log2
Compute binary logarithm

(function )

logb
Compute floating-point base logarithm

(function )

scalbn
Scale significand using floating-point base exponent

(function )

scalbln
Scale significand using floating-point base exponent (long)

Power functions

pow
Raise to power

(function )

sqrt
Compute square root

(function )

cbrt
Compute cubic root

(function )

(function )

hypot
Compute hypotenuse

(function )

Error and gamma functions

erf
Compute error function

(function )

erfc
Compute complementary error function

(function )

tgamma
Compute gamma function

(function )

lgamma
Compute log-gamma function

(function )

Rounding and remainder functions

ceil
Round up value

(function )

floor
Round down value

(function )

fmod
Compute remainder of division

(function )

trunc
Truncate value

(function )

round
Round to nearest

(function )

lround
Round to nearest and cast to long integer

(function )

llround
Round to nearest and cast to long long integer

(function )

rint
Round to integral value

(function )

lrint
Round and cast to long integer

(function )

llrint
Round and cast to long long integer

(function )

nearbyint
Round to nearby integral value

(function )

remainder
Compute remainder (IEC 60559)

(function )

remquo
Compute remainder and quotient

(function )

Floating-point manipulation functions

copysign
Copy sign

(function )

NAN
Not-A-Number

(constant )

nextafter
Next representable value

(function )

nexttoward
Next representable value toward precise value

(function )

Minimum, maximum, difference functions

fdim
Positive difference

(function )

fmax
Maximum value

(function )

fmin
Minimum value

(function )

Other functions

fabs
Compute absolute value

(function )

Compute absolute value

(function )

abs

fma
Multiply-add

(function )

Macros / Functions
These are implemented as macros in C and as functions in C++:
Classification macro / functions

fpclassify
Classify floating-point value
isfinite
Is finite value

(macro )

isinf
Is infinity
isnan

(macro/function )

(macro/function )

Is Not-A-Number

(macro/function )

isnormal
Is normal

(macro/function )

signbit
Sign bit

(macro/function )

Comparison macro / functions

isgreater
Is greater

(macro )

isgreaterequal
Is greater or equal

(macro )

isless
Is less

(macro )

islessequal
Is less or equal

(macro )

islessgreater
Is less or greater

(macro )

isunordered
Is unordered

(macro )

Macro constants
math_errhandling
Error handling

(macro )

INFINITY
Infinity

(constant )

NAN
Not-A-Number

(constant )

HUGE_VAL
Huge value

(constant )

HUGE_VALF
Huge float value
HUGE_VALL
Huge long double value

(constant )

This header also defines the following macro constants:


macro

typ
e

description

MATH_ERRNO
MATH_ERREXC int Bitmask value with the possible values math_errhandling can take.
EPT
FP_FAST_FMA
FP_FAST_FMAF

int

Each, if defined, identifies for which type fma is at least as efficient


as x*y+z.

FP_FAST_FMAL
FP_INFINITE
FP_NAN
FP_NORMAL
int The possible values returned by fpclassify.
FP_SUBNORMA
L
FP_ZERO
FP_ILOGB0
int Special values the ilogb function may return.
FP_ILOGBNAN

C++
C++

Desarrollador(es)

Bjarne Stroustrup, Bell Labs

Informacin general

Extensiones

.h .hh .hpp .hxx .h++ .cc .cpp

comunes

.cxx .c++

Paradigma

multiparadigma:orientado a
objetos,imperativo, programacin
genrica.

Apareci en

1983

Diseado por

Bjarne Stroustrup

ltima versin

ISO/IEC 14882:2011(2011)

estable

ltima versin

C++11

en pruebas

Tipo de dato

fuerte, esttico, nominativo

Implementacio C++ Builder, clang,Comeau C/C+


nes

+, GCC,Intel C++ Compiler,Microsoft


Visual C++, Sun Studio, Code::Blocks,
Zinjai

Dialectos

ISO/IEC C++ 1998,ISO/IEC C+

+ 2003,ISO/IEC C++ 2011

Influido por

C, Simula, Ada 83,ALGOL 68, CLU, ML1

Ha influido a

Perl, LPC, Lua, Pike, Ada


95, Java, PHP, D, C99,C#, Falcon

Sistema

Multiplataforma

operativo

C++ es un lenguaje de programacin diseado a mediados de los aos 1980 por Bjarne Stroustrup. La
intencin de su creacin fue el extender al exitoso lenguaje de programacin C con mecanismos que
permitan la manipulacin de objetos. En ese sentido, desde el punto de vista de loslenguajes orientados
a objetos, el C++ es un lenguaje hbrido.
Posteriormente se aadieron facilidades de programacin genrica, que se sum a los otros dos
paradigmas que ya estaban admitidos (programacin estructurada y la programacin orientada a
objetos). Por esto se suele decir que el C++ es un lenguaje de programacin multiparadigma.
Actualmente existe un estndar, denominado ISO C++, al que se han adherido la mayora de los
fabricantes de compiladores ms modernos. Existen tambin algunos intrpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores, y de poder crear
nuevos tipos que se comporten como tipos fundamentales.
El nombre C++ fue propuesto por Rick Mascitti en el ao 1983, cuando el lenguaje fue utilizado por
primera vez fuera de un laboratorio cientfico. Antes se haba usado el nombre "C con clases". En C++,
la expresin "C++" significa "incremento de C" y se refiere a que C++ es una extensin de C.
ndice
[ocultar]

1 Un ejemplo de programa, el clsico Hola mundo

2 Tipos de datos

2.1 Tamaos asociados

2.2 Wchar_t

2.3 La palabra reservada "void"

2.4 La palabra "NULL"

3 Principios

4 El concepto de clase

4.1 Constructores

4.2 Destructores

4.3 Funciones miembro

4.4 Plantillas

4.4.1 Especializacin

4.5 Clases abstractas

4.6 Espacios de nombres

4.7 Herencia

4.7.1 Herencia simple

4.7.2 Herencia mltiple


4.8 Sobrecarga de operadores

5 Standard Template Library (STL)

6 Biblioteca de entrada y salida

6.1 Fstreams

6.2 Sstreams

6.3 Contenedores

6.4 Iteradores

6.5 Algoritmos

7 C++11

8 Diferencias de tipos respecto a C

9 Compiladores

10 Ejemplo: Cmd con colores

10.1 Uso:
11 Entornos de desarrollo

11.1 Bajo Microsoft Windows

11.2 Bajo MacOS

11.3 Bajo DOS

11.4 Bajo GNU/Linux

12 Referencias

12.1 Bibliografa
13 Enlaces externos

Un ejemplo de programa, el clsico Hola mundo[editar editar cdigo]


A continuacin se cita un programa de ejemplo Hola mundo escrito en C:
/* Esta cabecera permite usar los objetos que encapsulan los descriptores
stdout

y stdin: cout(<<) y cin(>>)*/


#include <iostream>
int main()
{
std::cout << "Hola mundo" << std::endl;
std::cin.get();
}
Al usar la directiva #include estamos dicindole al compilador que busque e interprete todos los
elementos definidos en el archivo que acompaa la directiva (en este caso, iostream). Para evitar
sobrescribir los elementos ya definidos al ponerles igual nombre, se crearon los espacios de nombres
o namespace del singular en ingls. En este caso hay un espacio de nombres llamado std, que es
donde se incluyen las definiciones de todas las funciones y clases que conforman la biblioteca estndar
de C++. Al incluir la sentencia using namespace std le estamos diciendo al compilador que
usaremos el espacio de nombres std por lo que no tendremos que incluirlo cuando usemos elementos
de este espacio de nombres, como pueden ser los objetos cout y cin, que representan el flujo de
salida estndar (tpicamente la pantalla o una ventana de texto) y el flujo de entrada estndar
(tpicamente el teclado).
La definicin de funciones es igual que en C, salvo por la caracterstica de que si main no va a recoger
argumentos, no tenemos por qu ponrselos, a diferencia de C, donde haba que ponerlos
explcitamente, aunque no se fueran a usar. Queda solo comentar que el smbolo << se conoce como
operador de insercin, y grosso modo est enviando a cout lo que queremos mostrar por pantalla para
que lo pinte, en este caso la cadena "Hola mundo". El mismo operador << se puede usar varias
veces en la misma sentencia, de forma que gracias a esta caracterstica podremos concatenar el
objeto endl al final, cuyo resultado ser imprimir un retorno de lnea.
Por ltimo tomaremos una secuencia de caracteres del teclado hasta el retorno de lnea (presionando
ENTER), llamando al mtodo get del objeto cin.

Tipos de datos[editar editar cdigo]


C++ tiene los siguientes tipos fundamentales:

Caracteres: char (tambin es un entero), wchar_t

Enteros: short, int, long, long long

Nmeros en coma flotante: float, double, long double

Booleanos: bool

Vaco: void

El modificador unsigned se puede aplicar a enteros para obtener nmeros sin signo (por omisin los

Tamaos de tipos primitivos bajo i386 (GCC)


Tipo

Nmero de Bits

char

short

16

int

32

float

32

double

64

enteros contienen signo), con lo que se consigue un rango mayor de nmeros naturales.

Tamaos asociados[editar editar cdigo]


Segn la mquina y el compilador que se utilice los tipos primitivos pueden ocupar un determinado
tamao en memoria. La siguiente lista ilustra el nmero de bits que ocupan los distintos tipos primitivos
en la arquitectura x86.
Otras arquitecturas pueden requerir distintos tamaos de tipos de datos primitivos. C++ no dice nada
acerca de cul es el nmero de bits en un byte, ni del tamao de estos tipos; ms bien, ofrece
solamente las siguientes "garantas de tipos":

De acuerdo al estndar C99, un tipo char debe ocupar exactamente un byte compuesto de un
mnimo de 8 bits independientemente de la arquitectura de la mquina.

El tamao reconocido de char es de 1. Es decir, sizeof(char) siempre devuelve 1.

Un tipo short tiene al menos el mismo tamao que un tipo char.

Un tipo long tiene al menos el doble tamao en bytes que un tipo short.

Un tipo int tiene un tamao entre el de short y el de long, ambos inclusive,


preferentemente el tamao de un apuntador de memoria de la mquina.

Un tipo unsigned tiene el mismo tamao que su versin signed.

Wchar_t[editar editar cdigo]


Para la versin del estndar que se public en 1998, se decidi aadir el tipo de dato wchar_t, que
permite el uso de caracteres UNICODE, a diferencia del tradicional char, que contempla simplemente
al cdigo de caracteres ASCII extendido. A su vez, se ha definido para la mayora de las funciones y
clases, tanto de C como de C++, una versin para trabajar con wchar_t, donde usualmente se prefija
el carcter w al nombre de la funcin (en ocasiones el carcter es un infijo). Por ejemplo:

strcpy - wstrcpy

std::string - std::wstring

std::cout - std::wcout

Cabe resaltar que en C se define wchar_t como:


typedef unsigned short wchar_t;
Mientras que en C++ es en s mismo un tipo de dato.

La palabra reservada "void"[editar editar cdigo]


La palabra reservada void define en C++ el concepto de no existencia o no atribucin de un tipo en
una variable o declaracin. Es decir, una funcin declarada como void no devolver ningn valor. Esta
palabra reservada tambin puede usarse para indicar que una funcin no recibe parmetros, como en la
siguiente declaracin:
int funcion (void);
Aunque la tendencia actual es la de no colocar la palabra "void".
Adems se utiliza para determinar que una funcin no retorna un valor, como en:
void funcion (int parametro);

Cabe destacar que void no es un tipo. Una funcin como la declarada anteriormente no puede
retornar un valor por medio de return: la palabra clave va sola. No es posible una declaracin del tipo:
void t; //Est mal
En este sentido, void se comporta de forma ligeramente diferente a como lo hace en C, especialmente
en cuanto a su significado en declaraciones y prototipos de funciones.
Sin embargo, la forma especial void * indica que el tipo de datos es un puntero. Por ejemplo:
void *memoria;
Indica que memoria es un puntero a alguna parte, donde se guarda informacin de algn tipo.
El programador es responsable de definir estos "algn", eliminando toda ambigedad. Una ventaja de la
declaracin "void *" es que puede representar a la vez varios tipos de datos, dependiendo de la
operacin de cast escogida. La memoria que hemos apuntado en alguna parte, en el ejemplo anterior,
bien podra almacenar un entero, un flotante, una cadena de texto o un programa, o combinaciones de
stos. Es responsabilidad del programador recordar qu tipo de datos hay y garantizar el acceso
adecuado.

La palabra "NULL"[editar editar cdigo]


Adems de los valores que pueden tomar los tipos anteriormente mencionados, existe un valor llamado
NULL, sea el caso numrico para los enteros, caracter para el tipo char, cadena de texto para el tipo
string, etc. El valor NULL, expresa, por lo regular, la representacin de una Macro, asignada al valor "0".
Tenemos entonces que:
void* puntero = NULL;
int entero = NULL;
bool boleana = NULL;
char caracter = NULL;
El valor de las variables anteriores nos dara 0. A diferencia de la variable "caracter", que nos dara el
equivalente a NULL, '\0', para caracteres.

Principios[editar editar cdigo]

Todo programa en C++ debe tener la funcin principal main() (a no ser que se especifique en tiempo
de compilacin otro punto de entrada, que en realidad es la funcin que tiene el main())
int main()
{}
La funcin principal del cdigo fuente main debe tener uno de los siguientes prototipos:

int main()
int main(int argc, char** argv)
Aunque no es estndar algunas implementaciones permiten

int main(int argc, char** argv, char** env)


La primera es la forma por omisin de un programa que no recibe parmetros ni argumentos. La
segunda forma tiene dos parmetros: argc, un nmero que describe el nmero de argumentos del
programa (incluyendo el nombre del programa mismo), y argv, un puntero a un array de punteros,
de argc elementos, donde el elemento argv[i] representa el i-simo argumento entregado al
programa. En el tercer caso se aade la posibilidad de poder acceder a las variables de entorno de
ejecucin de la misma forma que se accede a los argumentos del programa, pero reflejados sobre la
variable env.
El tipo de retorno de main es un valor entero int. Al finalizar la funcin main, debe incluirse el valor de
retorno (por ejemplo, return 0;, aunque el estndar prev solamente dos posibles valores de retorno:
EXIT_SUCCESS y EXIT_FAILURE, definidas en el archivo cstdlib), o salir por medio de la
funcin exit. Alternativamente puede dejarse en blanco, en cuyo caso el compilador es responsable de
agregar la salida adecuada.

El concepto de clase[editar editar cdigo]


Vase tambin: Clase (informtica)

Los objetos en C++ son abstrados mediante una clase. Segn el paradigma de la programacin
orientada a objetos un objeto consta de:
1. Identidad, que lo diferencia de otros objetos (Nombre que llevara la clase a la que pertenece
dicho objeto).
2. Mtodos o funciones miembro

3. Atributos o variables miembro


Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas caractersticas
(atributos). Su nmero de patas, el color de su pelaje o su tamao son algunos de sus atributos. Las
funciones que lo hagan ladrar, cambiar su comportamiento... esas son las funciones de la clase.
Este es otro ejemplo de una clase:
class Punto
{
//por omisin los miembros son 'private' para que slo se puedan modificar
desde la propia clase.
private:
// Variable miembro privada
int id;
protected:
// Variables miembro protegidas
int x;
int y;
public:
// Constructor
Punto();
// Destructor
~Punto();
// Funciones miembro o mtodos
int ObtenerX();
int ObtenerY();
};

Constructores[editar editar cdigo]


Vase tambin: Constructor (informtica)

Son unos mtodos especiales que se ejecutan automticamente al crear un objeto de la clase. En su
declaracin no se especifica el tipo de dato que devuelven, y poseen el mismo nombre que la clase a la
que pertenecen. Al igual que otros mtodos, puede haber varios constructores sobrecargados, aunque
no pueden existir constructores virtuales.
Como caracterstica especial a la hora de implementar un constructor, justo despus de la declaracin
de los parmetros, se encuentra lo que se llama "lista de inicializadores". Su objetivo es llamar a los
constructores de los atributos que conforman el objeto a construir.

Cabe destacar que no es necesario declarar un constructor al igual que un destructor, pues el
compilador lo puede hacer, aunque no es la mejor forma de programar.
Tomando el ejemplo de la Clase Punto, si deseamos que cada vez que se cree un objeto de esta clase
las coordenadas del punto sean igual a cero podemos agregar un constructor como se muestra a
continuacin:
class Punto
{
public:
float x;

// Coordenadas del punto

float y;
// Constructor
Punto() : x(0), y(0){ // Inicializamos las variables "x" e "y"
}
};
// Main para demostrar el funcionamiento de la clase
# include <iostream> // Esto nos permite utilizar "cout"
using namespace std;
int main () {
Punto MiPunto;

// creamos un elemento de la clase Punto llamado

MiPunto
cout << "Coordenada X: " << MiPunto.x << endl;

// mostramos el valor

acumulado en la variable x
cout << "Coordenada Y: " << MiPunto.y << endl;

// mostramos el valor

acumulado en la variable y
getchar(); // le indicamos al programa que espere al buffer de entrada
(detenerse)
return 0;
}
Si compilamos y ejecutamos el anterior programa, obtenemos una salida que debe ser similar a la
siguiente:
Coordenada X: 0 Coordenada Y: 0

Existen varios tipos de constructores en C++:


1. Constructor predeterminado. Es el constructor que no recibe ningn parmetro en la funcin.
Si no se definiera ningn constructor, el sistema proporcionara uno predeterminado. Es
necesario para la construccin de estructuras y contenedores de la STL.
2. Constructor de copia. Es un constructor que recibe un objeto de la misma clase, y realiza una
copia de los atributos del mismo. Al igual que el predeterminado, si no se define, el sistema
proporciona uno.
3. Constructor de conversin. Este constructor, recibe como nico parmetro, un objeto o
variable de otro tipo distinto al suyo propio. Es decir, convierte un objeto de un tipo determinado
a otro objeto del tipo que estamos generando.
Constructores + Memoria heap Un objeto creado de la forma que se vio hasta ahora, es un objeto que
vive dentro del scope(las llaves { }) en el que fue creado. Para que un objeto pueda seguir viviendo
cuando se saque de el scope en el que se cre, se lo debe crear en memoria heap. Para esto, se utiliza
el operador new, el cual asigna memoria para almacenar al objeto creado, y adems llama a su
constructor(por lo que se le pueden enviar parmetros). El operador new se utiliza de la siguiente
manera:
int main() {
Punto *unPunto = new Punto(); //esto llama al constructor que se describe
ms arriba
delete unPunto;

//no hay que olvidarse de liberar la memoria

ocupada por el objeto(ver la seccin destructores, ms abajo)


return 0;
}
Adems, con el operador new[] se pueden crear arrays (colecciones o listas ordenadas) de tamao
dinmico:
Punto *asignar(int cuantos) {
return new Punto[cuantos]; //asigna un array de 'cuantos' puntos(se llama
el constructor que se muestra ms arriba), y se retorna.
}

Destructores[editar editar cdigo]


Vase tambin: Destructor (informtica)

Los destructores son funciones miembro especiales llamadas automticamente en la ejecucin del
programa, y por tanto no tienen por qu ser llamadas explcitamente por el programador. Sus
principales cometidos son:

Liberar los recursos computacionales que el objeto de dicha clase haya adquirido en tiempo de
ejecucin al expirar ste.

Quitar los vnculos que pudiesen tener otros recursos u objetos con ste.

Los destructores son invocados automticamente al alcanzar el flujo del programa el fin del mbito en el
que est declarado el objeto. El nico caso en el que se debe invocar explcitamente al destructor de
un objeto, es cuando ste fue creado mediante el operador new, es decir, que ste vive en memoria
heap, y no en la pila de ejecucin del programa. La invocacin del destructor de un objeto que vive en
heap se realiza a travs del operador delete o delete[] para arrays. Ejemplo:
int main() {
int *unEntero = new int(12);

//asignamos un entero en memoria heap

con el valor 12
int *arrayDeEnteros = new int[25]; //asignamos memoria para 25 enteros(no
estan inicializados)
delete unEntero;

//liberamos la memoria que ocupaba

unEntero
delete[] arrayDeEnteros;

//liberamos la memoria ocupada por

arrayDeEnteros
return 0;
}
Si no se utilizara el operador delete y delete[] en ese caso, la memoria ocupada por unEntero y
arrayDeEnteros respectivamente, quedara ocupada sin sentido. Cuando una porcin de memoria queda
ocupada por una variable que ya no se utiliza, y no hay forma de acceder a ella, se denomina un
'memory leak'. En aplicaciones grandes, si ocurren muchos memory leaks, el programa puede terminar
ocupando bastante ms memoria RAM de la que debera, lo que no es para nada conveniente. Es por
esto, que el manejo de memoria heap debe usarse conscientemente.
Existen dos tipos de destructores pueden ser pblicos o privados, segn si se declaran:

Si es pblico se llama desde cualquier parte del programa para destruir el objeto.

Si es privado no se permite la destruccin del objeto por el usuario.

El uso de destructores es clave en el concepto de Adquirir Recursos es Inicializar.

Funciones miembro[editar editar cdigo]


Funcin miembro es aquella que est declarada en mbito de clase. Son similares a las funciones
habituales, con la salvedad de que el compilador realizara el proceso de Decoracin de nombre (Name
Mangling en ingls): Cambiar el nombre de la funcin aadiendo un identificador de la clase en la que
est declarada, pudiendo incluir caracteres especiales o identificadores numricos. Este proceso es
invisible al programador. Adems, las funciones miembro reciben implcitamente un parmetro adicional:
El puntero this, que referencia al objeto que ejecuta la funcin.
Las funciones miembro se invocan accediendo primero al objeto al cual refieren, con la
sintaxis: myobject.mymemberfunction(), esto es un claro ejemplo de una funcin miembro.
Caso especial es el de las funciones miembro estticas. A pesar de que son declaradas dentro de la
clase, con el uso de la palabra clave static no recibirn el puntero this. Gracias a esto no es
necesario crear ninguna instancia de la clase para llamar a esta funcin, sin embargo, slo se podr
acceder a los miembros estticos de la clase dado que estos no estn asociados al objeto sino al tipo.
La sintaxis para llamar a esta funcin esttica es mytype::mystaticmember().

Plantillas[editar editar cdigo]


Las plantillas son el mecanismo de C++ para implantar el paradigma de la programacin genrica.
Permiten que una clase o funcin trabaje con tipos de datos abstractos, especificndose ms adelante
cuales son los que se quieren usar. Por ejemplo, es posible construir un vector genrico que pueda
contener cualquier tipo de estructura de datos. De esta forma se pueden declarar objetos de la clase de
este vector que contengan enteros, flotantes, polgonos, figuras, fichas de personal, etc.
La declaracin de una plantilla se realiza anteponiendo la declaracin template <typename

A,....> a la declaracin de la estructura (clase, estructura o funcin) deseado.


Por ejemplo:
template <typename T>
T max(const T &x, const T &y) {
return (x > y) ? x : y; //si x > y, retorna x, sino retorna y
}

La funcin max() es un ejemplo de programacin genrica, y dados dos parmetros de un tipo T (que
puede ser int, long, float, double, etc.) devolver el mayor de ellos (usando el operador >). Al
ejecutar la funcin con parmetros de un cierto tipo, el compilador intentar "calzar" la plantilla a ese tipo
de datos, o bien generar un mensaje de error si fracasa en ese proceso.

Especializacin[editar editar cdigo]

Clases abstractas[editar editar cdigo]


En C++ es posible definir clases abstractas. Una clase abstracta, o clase base abstracta (ABC), es una
que est diseada slo como clase padre de las cuales se deben derivar clases hijas. Una clase
abstracta se usa para representar aquellas entidades o mtodos que despus se implementarn en las
clases derivadas, pero la clase abstracta en s no contiene ninguna implementacin -- solamente
representa los mtodos que se deben implementar. Por ello, no es posible instanciar una clase
abstracta, pero s una clase concreta que implemente los mtodos definidos en ella.
Las clases abstractas son tiles para definir interfaces, es decir, un conjunto de mtodos que definen el
comportamiento de un mdulo determinado. Estas definiciones pueden utilizarse sin tener en cuenta la
implementacin que se har de ellos.
En C++ los mtodos de las clases abstractas se definen como funciones virtuales puras.
class Abstracta
{
public:
virtual int metodo() = 0;
};
class ConcretaA : public Abstracta
{
public:
int metodo()
{
//haz algo
return foo () + 2;
}
};
class ConcretaB : public Abstracta
{
public:
int metodo()

{
//otra implementacin
return baz () - 5;
}
};
En el ejemplo, la clase ConcretaA es una implementacin de la clase Abstracta, y la
clase ConcretaB es otra implementacin. Debe notarse que el = 0 es la notacin que emplea C++
para definir funciones virtuales puras.

Espacios de nombres[editar editar cdigo]


Una adicin a las caractersticas de C son los espacios de nombre (namespace en ingls), los cuales
pueden describirse como reas virtuales bajo las cuales ciertos nombres de variable o tipos tienen
validez. Esto permite evitar las ocurrencias de conflictos entre nombres de funciones, variables o clases.
El ejemplo ms conocido en C++ es el espacio de nombres std::, el cual almacena todas las
definiciones nuevas en C++ que difieren de C (algunas estructuras y funciones), as como las
funcionalidades propias de C++ (streams) y los componentes de la biblioteca STL.
Por ejemplo:
# include <iostream>
// Las funciones en esta cabecera existen dentro del espacio de nombres std::
namespace mi_paquete{
int mi_valor;
};
int main()
{
int mi_valor = 3;
mi_paquete::mi_valor = 4;
std::cout << mi_valor << '\n'; // imprime '3'
std::cout << mi_paquete::mi_valor << '\n'; // imprime '4'
return 0;
}
Como puede verse, las invocaciones directas a mi_valor darn acceso solamente a la variable descrita
localmente; para acceder a la variable del espacio de nombres mi_paquete es necesario acceder

especficamente el espacio de nombres. Un atajo recomendado para programas sencillos es la


directiva using namespace, que permite acceder a los nombres de variables del paquete deseado en
forma directa, siempre y cuando no se produzca alguna ambigedad o conflicto de nombres.

Herencia[editar editar cdigo]


Existen varios tipos de herencia entre clases en el lenguaje de programacin C++. Estos son:

Herencia simple[editar editar cdigo]


La herencia en C++ es un mecanismo de abstraccin creado para poder facilitar y mejorar el diseo de
las clases de un programa. Con ella se pueden crear nuevas clases a partir de clases ya hechas,
siempre y cuando tengan un tipo de relacin especial.
En la herencia, las clases derivadas "heredan" los datos y las funciones miembro de las clases base,
pudiendo las clases derivadas redefinir estos comportamientos (polimorfismo) y aadir comportamientos
nuevos propios de las clases derivadas. Para no romper el principio de encapsulamiento (ocultar datos
cuyo conocimiento no es necesario para el uso de las clases), se proporciona un nuevo modo de
visibilidad de los datos/funciones: "protected". Cualquier cosa que tenga visibilidad protected se
comportar como pblica en la clase Base y en las que componen la jerarqua de herencia, y como
privada en las clases que NO sean de la jerarqua de la herencia.
Antes de utilizar la herencia, nos tenemos que hacer una pregunta, y si tiene sentido, podemos intentar
usar esta jerarqua: Si la frase <claseB> ES-UN <claseA> tiene sentido, entonces estamos ante un
posible caso de herencia donde clase A ser la clase base y clase B la derivada.
Ejemplo: clases Barco, Acorazado, Carguero, etc. un Acorazado ES-UN Barco, un Carguero ES-UN
Barco, un Trasatlntico ES-UN Barco, etc.
En este ejemplo tendramos las cosas generales de un Barco (en C++)
class Barco {
protected:
char* nombre;
float peso;
public:
//Constructores y dems funciones bsicas de barco
};

y ahora las caractersticas de las clases derivadas, podran (a la vez que heredan las de barco) aadir
cosas propias del subtipo de barco que vamos a crear, por ejemplo:
class Carguero: public Barco { // Esta es la manera de especificar que hereda
de Barco
private:
float carga;
//El resto de cosas
};
class Acorazado: public Barco {
private:
int numeroArmas;
int Soldados;
// El resto de cosas
};
Por ltimo, hay que mencionar que existen 3 clases de herencia que se diferencian en el modo de
manejar la visibilidad de los componentes de la clase resultante:

Herencia publica (class Derivada: public Base ): Con este tipo de herencia se respetan los
comportamientos originales de las visibilidades de la clase Base en la clase Derivada.

Herencia privada (clase Derivada: private Base): Con este tipo de herencia todo componente de
la clase Base, ser privado en la clase Derivada (las propiedades heredadas sern privadas aunque
estas sean pblicas en la clase Base)

Herencia protegida (clase Derivada: protected Base): Con este tipo de herencia, todo
componente pblico y protegido de la clase Base, ser protegido en la clase Derivada, y los
componentes privados, siguen siendo privados.

Herencia mltiple[editar editar cdigo]


La herencia mltiple es el mecanismo que permite al programador hacer clases derivadas a partir, no de
una sola clase base, sino de varias. Para entender esto mejor, pongamos un ejemplo: Cuando ves a
quien te atiende en una tienda, como persona que es, podrs suponer que puede hablar, comer, andar,
pero, por otro lado, como empleado que es, tambin podrs suponer que tiene un jefe, que puede
cobrarte dinero por la compra, que puede devolverte el cambio, etc. Si esto lo trasladamos a la
programacin sera herencia mltiple (clase empleado_tienda):
class Persona {

...
Hablar();
Caminar();
...
};
class Empleado {
Persona jefe;
int sueldo;
Cobrar();
...
};
class EmpleadoTienda: public Persona, Empleado {
...
AlmacenarStock();
ComprobarExistencias();
...
};
Por tanto, es posible utilizar ms de una clase para que otra herede sus caractersticas.

Sobrecarga de operadores[editar editar cdigo]


La sobrecarga de operadores es una forma de hacer polimorfismo. Es posible definir el comportamiento
de un operador del lenguaje para que trabaje con tipos de datos definidos por el usuario. No todos los
operadores de C++ son factibles de sobrecargar, y, entre aquellos que pueden ser sobrecargados, se
deben cumplir condiciones especiales. En particular, los operadores sizeofy :: no son
sobrecargables.
No es posible en C++ crear un operador nuevo.
Los comportamientos de los operadores sobrecargados se implementan de la misma manera que una
funcin, salvo que esta tendr un nombre especial: Tipo de dato de

devolucinoperator<token del operador>(parmetros)


Los siguientes operadores pueden ser sobrecargados:

Operadores Unarios

Operador * (de indireccin)

Operador -> (de indireccin)

Operador & (de direccin)

Operador +

Operador -

Operador ++

Operador --

Operadores Binarios

Operador ==

Operador +

Operador -

Operador *

Operador /

Operador %

Operador <<

Operador >>

Operador &

Operador ^

Operador |

Operador []

Operador ()

Operadores de Asignacin

Operador =

Operador +=

Operador -=

Operador *=

Operador /=

Operador %=

Operador <<=

Operador >>=

Operador &=

Operador ^=

Operador |=

Dado que estos operadores son definidos para un tipo de datos definido por el usuario, ste es libre de
asignarles cualquiera semntica que desee. Sin embargo, se considera de primera importancia que las
semnticas sean tan parecidas al comportamiento natural de los operadores como para que el uso de
los operadores sobrecargados sea intuitivo. Por ejemplo, el uso del operador unario - debiera cambiar el
"signo" de un "valor".
Los operadores sobrecargados no dejan de ser funciones, por lo que pueden devolver un valor, si este
valor es del tipo de datos con el que trabaja el operador, permite el encadenamiento de sentencias. Por
ejemplo, si tenemos 3 variables A,B y C de un tipo T y sobrecargamos el operador = para que trabaje
con el tipo de datos T, hay dos opciones: si el operador no devuelve nada una sentencia como "A=B=C;"
(sin las comillas) dara error, pero si se devuelve un tipo de datos T al implementar el operador,
permitira concatenar cuantos elementos se quisieran, permitiendo algo como "A=B=C=D=...;"

Standard Template Library (STL)[editar editar cdigo]

Artculo principal: Standard Template Library

Los lenguajes de programacin suelen tener una serie de bibliotecas de funciones integradas para la
manipulacin de datos a nivel ms bsico. En C++, adems de poder usar las bibliotecas de C, se
puede usar la nativa STL (Standard Template Library), propia del lenguaje. Proporciona una
serie plantillas (templates) que permiten efectuar operaciones sobre el almacenado de datos, procesado
de entrada/salida.

Biblioteca de entrada y salida[editar editar cdigo]


Las clases basic_ostream y basic_stream, y los objetos cout y cin, proporcionan la entrada y salida
estndar de datos (teclado/pantalla). Tambin est disponible cerr, similar a cout, usado para la salida
estndar de errores. Estas clases tienen sobrecargados los operadores << y >>, respectivamente, con el
objeto de ser tiles en la insercin/extraccin de datos a dichos flujos. Son operadores inteligentes, ya
que son capaces de adaptarse al tipo de datos que reciben, aunque tendremos que definir el
comportamiento de dicha entrada/salida para clases/tipos de datos definidos por el usuario. Por ejemplo:
ostream& operator<<(ostream& fs,const Punto& punto)
{
return fs << punto.x << "," << punto.y;
}
De esta forma, para mostrar un punto, solo habra que realizar la siguiente expresin:
//...
Punto p(4,5);
//...
cout << "Las coordenadas son: " << p << endl;
//...
Es posible formatear la entrada/salida, indicando el nmero de dgitos decimales a mostrar, si los textos
se pasarn a minsculas o maysculas, si los nmeros recibidos estn en formatooctal o hexadecimal,
etc.

Fstreams[editar editar cdigo]


Tipo de flujo para el manejo de ficheros. La definicin previa de ostreams/istreams es aplicable a este
apartado. Existen tres clases (ficheros de lectura, de escritura o de
lectura/escritura):ifstream,ofstream y fstream.

Como abrir un fichero: (nombre_variable_fichero).open("nombre_fichero.dat/txt",ios::in); para abrirlo en


modo lectura. (nombrevariablefichero).open("nombre_fichero.dat/txt",ios::out); para abrirlo en modo
escritura.
Ejemplo: f.open("datos.txt",ios::in);
Como cerrar el fichero: nombre_variable_fichero.close();
Ejemplo: f.close();
Leer un fichero:

1-Si es fichero de texto plano:


#include <fstream>
#include <string>
#include <iostream>
using namespace std;
int main() {
ifstream entrada;
entrada.open("textoPlano.txt");
string unString;
while(entrada >> unString)
cout << "Lei: " << unString << endl;
return 0;
}

2-Si es un fichero binario(.dat);


nombre_variable_fichero.read((char*)&nombre_variable,sizeof(tipo_variable
));
Ejemplo:
f.read((char*)&e,sizeof(int));

Escribir un fichero:

1-Si es fichero de texto(.txt):

nombrevariable<<"texto"; donde "texto" puede ser tambin una variable


de cualquier tipo primitivo, o un string.
Ejemplo: f<<HOLA;
2-Si es un fichero binario(.dat);
nombre_variable_fichero.write((char*)&nombre_variable,sizeof(tipo_variabl
e));
Ejemplo:
f.write((char*)&e,sizeof(int));

Pueden abrirse pasando al constructor los parmetros relativos a la ubicacin del fichero y el modo de
apertura:

Sstreams[editar editar cdigo]


Se destacan dos clases, ostringstream e istringstream. Todo lo anteriormente dicho es aplicable a
estas clases. Tratan a una cadena como si de un flujo de datos se tratase. ostringstream permite
elaborar una cadena de texto insertando datos cual flujo, e istringstream puede extraer la informacin
contenida en una cadena (pasada como parmetro en su constructor) con el operador >>. Ejemplos:
ostringstream s;
s << nombre << "," << edad << "," << estatura << "," << punto(5,6) << endl;
cout << s.str();
istringstream s(cadena);
s >> nombre >> edad >> estatura >> p;

Contenedores[editar editar cdigo]


Son clases plantillas especiales utilizadas para almacenar tipos de datos genricos, sean cuales sean.
Todos los contenedores son homogneos, es decir, una vez que se declaran para contener un tipo de
dato determinado, en ese contenedor, solo se podrn meter elementos de ese tipo. Segn la naturaleza
del almacenado, disponemos de varios tipos:

Vectores: Se definen por

vector<tipo_de_dato> nombre_del_vector;

Son arrays (o listas ordenadas) que se redimensionan automticamente al agregar nuevos


elementos, por lo que se le pueden agregar "tericamente", infinitos elementos. Los vectores nos
permiten acceder a cualquier elemento que contenga, mediante el operador[]. Debe tenerse en
cuenta que si se intenta acceder a una posicin que excede los lmites del vector, este no har
ningn chequeo, por lo que se debe ser cuidadoso al utilizar este operador. Para asegurar un
acceso seguro al vector, se puede utilizar el mtodo at(int), que lanza una excepcin de tipo
std::out_of_range en caso de que esto ocurra.
Para aadir elementos al final del vector, se utiliza el mtodo push_back(const T&). Por otro lado, para
eliminar un elemento del final del vector, se debe usar el mtodo pop_back().
#include <vector>

//libreria que contiene a la clase vector

#include <iostream>
using namespace std;
int main() {
vector<int> intVector;

//crea un vector de enteros(sin elementos)

intVector.push_back(25); //agrega el entero 25 al vector


cout << "El primer elemento es: " << intVector.front() <<
" y mi vector tiene " << intVector.size() << " elementos." << endl;
//imprime el primer elemento(retornado por el mtodo front()
intVector.push_back(32); //agrego el entero 32 al vector
cout << "El primer elemento es: " << intVector[0] << endl; //imprime 25
intVector.pop_back();

//elimina el ultimo elemento del vector(osea 32)

cout << "Ahora tengo: " << intVector.size() << " elementos." << endl;
//imprimir 1
return 0;
}

Colas dobles: son parecidas a los vectores, pero tienen mejor eficiencia para agregar o eliminar
elementos en las "puntas".

deque<tipo_de_dato> nombre_de_la_cola;

Adems de los mtodos push_back(const T&) y pop_back(), se agregan los mtodos push_front(const
T&) y pop_front(), que realizan lo mismo que los ya explicados, pero en el comienzo de la cola.
#include <deque>

//libreria de deques

using namespace std;


int main() {
deque<int> intDeque;
intDeque.push_front(25);
intDeque.push_back(12);
while(intDeque.size())
intDeque.pop_back(); //borra todos los elementos
return 0;
}

Listas: Son eficientes a la hora de agregar elementos. La diferencia con las colas dobles, es
que son ms eficientes para eliminar elementos que no estn en alguna de las "puntas"

list<tipo_de_dato> nombre_de_la_lista;

Adaptadores de secuencia.

Contenedores asociativos: map y multimap, que permiten asociar una "clave" con un "valor".
map no permite valores repetidos, mientras que multimap si.

map<tipo_de_llave, tipo_de_dato> nombre_del_map;


multimap<tipo_de_llave, tipo_de_dato> nombre_del_multimap;
#include <map>

//libreria que contiene a map y multimap

#include <string>

//libreria de strings

#include <iostream> //libreria de entrada/salida


using namespace std;
int main() {
map<int, string> intAString;
intAString[1] = "uno";
intAString[10] = "diez";
cout << "En intAString[1]: " << intAString[1] << endl;
cout << "En intAString[10]: " << intAString[10] << endl;
return 0;
}

Contenedores asociativos: set y multiset, que ofrecen solamente la condicin de "pertenencia",


sin la necesidad de garantizar un ordenamiento particular de los elementos que contienen.

Iteradores[editar editar cdigo]


Pueden considerarse como una generalizacin de la clase de "puntero". Un iterador es un tipo de dato
que permite el recorrido y la bsqueda de elementos en los contenedores. Como las estructuras de
datos (contenedores) son clases genricas, y los operadores (algoritmos) que deben operar sobre ellas
son tambin genricos (funciones genricas), Stepanov y sus colaboradores tuvieron que desarrollar el
concepto de iterador como elemento o nexo de conexin entre ambos. El nuevo concepto resulta ser
una especie de punteros que sealan a los diversos miembros del contenedor (punteros genricos que
como tales no existen en el lenguaje).

Algoritmos[editar editar cdigo]


Combinando la utilizacin de templates y un estilo especfico para denotar tipos y variables, la STL
ofrece una serie de funciones que representan operaciones comunes, y cuyo objetivo es "parametrizar"
las operaciones en que estas funciones se ven involucradas de modo que su lectura, comprensin y
mantenimiento, sean ms fciles de realizar.
Un ejemplo es la funcin copy, la cual simplemente copia variables desde un lugar a otro. Ms
estrictamente, copia los contenidos cuyas ubicaciones estn delimitadas por dos iteradores, al espacio
indicado por un tercer iterador. La sintaxis es:

copy (inicio_origen, fin_origen, inicio_destino);

De este modo, todos los datos que estn entre inicio_origen y fin_origen, excluyendo el dato ubicado en
este ltimo, son copiados a un lugar descrito o apuntado por inicio_destino.
Un algoritmo muy importante que viene implementado en la biblioteca STL, es el sort. El algoritmo sort,
ordena cualquier tipo de contenedor, siempre y cuando se le pasen como argumentos, desde donde y
hasta donde se quiere ordenarlo.
#include <vector>
#include <deque>
#include <algorithm>
int main() {
vector<int> intVector;
intVector.push_back(60);
intVector.push_back(12);

intVector.push_back(54); //para este momento, el vector tiene 60,12,54


sort(intVector.begin(), intVector.end()); //listo, array ordenado, ahora
tiene 12,54,60
/*Notar que si en vez de un vector, fuese una deque, se ordenaria de la
misma manera. */
}
Entre las funciones ms conocidas estn swap (variable1, variable2), que simplemente
intercambia los valores de variable1 y variable2; max (variable1, variable2) y su smilmin

(variable1, variable2), que retornan el mximo o mnimo entre dos valores; find (inicio,
fin, valor) que busca valor en el espacio de variables entre inicio y fin; etctera.
Los algoritmos son muy variados, algunos incluso tienen versiones especficas para operar con ciertos
iteradores o contenedores, y proveen un nivel de abstraccin extra que permite obtener un cdigo ms
"limpio", que "describe" lo que se est haciendo, en vez de hacerlo paso a paso explcitamente.

C++11[editar editar cdigo]


Artculo principal: C++11

El 12 de agosto de 2011, Herb Sutter, presidente del comit de estndares de C++, inform la
aprobacin unnime del nuevo estndar.2 La publicacin del mismo se espera para algn momento de
2011.
Entre las caractersticas del nuevo estndar se pueden destacar:

Funciones lambda;

Referencias rvalue;

La palabra reservada auto;

Inicializacin uniforme;

Plantillas con nmero variable de argumentos.

Adems se ha actualizado la biblioteca estndar del lenguaje.

Diferencias de tipos respecto a C[editar editar cdigo]

En C++, cualquier tipo de datos que sea declarado completo (fully qualified, en ingls) se convierte en
un tipo de datos nico. Las condiciones para que un tipo de datos T sea declarado completo son a
grandes rasgos las siguientes:

Es posible al momento de compilacin conocer el espacio asociado al tipo de datos (es decir, el
compilador debe conocer el resultado de sizeof(T)).

T Tiene al menos un constructor, y un destructor, bien declarados.

Si T es un tipo compuesto, o es una clase derivada, o es la especificacin de una plantilla, o


cualquier combinacin de las anteriores, entonces las dos condiciones establecidas previamente
deben aplicar para cada tipo de dato constituyente.

En general, esto significa que cualquier tipo de datos definido haciendo uso de las cabeceras completas,
es un tipo de datos completo.
En particular, y, a diferencia de lo que ocurra en C, los tipos definidos por medio
de struct o enum son tipos completos. Como tales, ahora son sujetos a sobrecarga, conversiones
implcitas, etctera.
Los tipos enumerados, entonces, ya no son simplemente alias para tipos enteros, sino que son tipos
de datos nicos en C++. El tipo de datos bool, igualmente, pasa a ser un tipo de datos nico, mientras
que en C funcionaba en algunos casos como un alias para alguna clase de dato de tipo entero.

Compiladores[editar editar cdigo]


Uno de los compiladores libres de C++ es el de GNU, el compilador G++ (parte del proyecto GCC, que
engloba varios compiladores para distintos lenguajes). Otros compiladores comunes sonIntel C++
Compiler, el compilador de Xcode, el compilador de Borland C++, el compilador de CodeWarrior C++, el
compilador g++ de Cygwin, el compilador g++ de MinGW, el compilador deVisual C++, Carbide.c++,
entre otros.

Versiones
El C++ es un idioma de programcion, tomado de mejorar con el agregado de pre-estructuras el
idiona C.
EN general los programas en c++ son compatibles , los que tienen cierta diferencia son los
compiladores.

Compilador, es un programa, que entiende el codigo y lo transforma en ordenes de maquina, El


compilador tiene su sistema de deteccion de errores y su ayuda. Hay compiladores que solo
procesan sobre consola es decir sobre la base del msdos o similar, otros permiten procesar en
ventanas (windows) e incorporar objetos visuales a lo que es codificacion.
Para consola, los mas comunes son el turbo c++ de borland, que admiten objetos o ventanas el
Dev C++ , el Visual C++ el borland buid C++ y hay muchos mas.
El C++ agrega preestructuras que es algo asi como las librerias que reciben el nombre de archivos
de cabecera, cada compilador tiene sus librerias, y son compatibles entre si, salvo la forma de
escribirse. Por ejemplo en Turbo C++ #include <iostream.h> es equivalente al #include <iostream>
del Dev C++ y el Visual C++ El TurboC++ y el DevC++ tienen el achivo de cabecera conio.h, pero
no son iguales asi que no todas las funciones de este archivo son compatibles y entre Visual C++
pasa lo mismo.
Ahora, si tus dudas tienen que ver con que comenzas a aprender a rogramar, yo te recomiendo el
turbo c++ de borland, es un compilador que tiene buena ayuda y formas de seguir facilmente la
ejecucion del programa escrito en codigo. El problema es que esta en ingles, pero con un
diccionario y algo de imaginacion, se sale adelante.
En la wikipedia hay mas detales sobre el c++
http://es.wikipedia.org/wiki/C%2B%2B
Alli hay una lista de compiladores
* XCode.
* Borland C++
* Codewarrior C++
* Comeau C++
* Cygwin (GNU C++)
* MINGW - Minimalist GNU for Windows.
* Dev C++ (IDE que usa MinGW)
* wx-Dev C++ (IDE basado en Dev C++)
* Digital Mars C++
* DJ Delorie's C++ development system for DOS/Windows (GNU C++)
* Edison Design Group C++ Front End
* Green Hills C++
* HP C++ para UNIX y HP C++ para OpenVMS.
* IBM C++
* Intel C++
* The LLVM Compiler Infrastructure.
* Mentor Graphics/Microtec Research C++
* Microsoft Visual C++
* Microsoft Visual Studio Express Editions
* Paradigm C++
* The Portland Group C++
* SGI C++
* Sun C++
* Sun Studio.
* WindRiver's Diab C++
* ZinjaI
y seguro hay mas, todos ellos basados en el desarrollo de C++
y con sus diferencias entre uno y otro.

Espero qe te sea de ayuda mi aorte


Dios te bendiga
Saludos
Antonio
Laboratorios

Pgina personal de Juan Antonio Pedreira

LABORATORIO. ENTORNO DE PROGRAMACIN DEV C++.

INSTRUCCIONES PARA LA DESCARGA E INSTALACIN DEL ENTORNO DEV-C++


V4.9.9.1
Esta versin es compatible con Windows 98 SE, ME, NT 4, 2000 y XP.
Descargar el siguiente fichero:

Dev-C++ Version 4.9.9.1 (7,8 Mb)

ATENCIN: Si tienes instalada alguna versin anterior de Dev-C++, desinstla


primero antes de instalar la versin 4.9.9.1
Ejecutar el fichero descargado.

Seguir las siguientes instrucciones de instalacin:


1. Al empezar a ejecutar la instalacin aparece una ventana de presentacin y aviso. Pulsar
sobre el botn "Aceptar".

2. Seguidamente aparece una nueva ventana con la licencia GNU. Pulsar sobre el botn "I
Agree"

3. Seguidamente se pregunta sobre el tipo de instalacin. Seleccionar en la lista desplegable


de la derecha la opcin "Typical", y seguidamente pulsar el botn "Next >".

4. Introducir el directorio en donde se instalar el entorno Dev-C++. Se recomienda mantener


el propuesto por defecto "C:\Dev-Cpp", y pulsar sobre el botn "Install".

5. Con ello comienza el proceso de instalacin de forma automtica, presentndose durante el


proceso una pantalla informativa sobre la marcha del proceso. Una vez que ha finalizado la
instalacin, pulsar sobre el botn "Close".

6. Una vez finalizada la instalacin arranca el programa de Dev-C++. La primera vez que se
arranca se presenta una ventana informado que se trata de una versin beta (no definitiva).
Pulsar sobre el botn "Aceptar".

7. Seguidamente solicitar que se elija el idioma en el que se presentarn los mens y textos
del entorno. Buscar en la lista la opcin "SpanishCastellano.Ing" y seleccionarla (la lista
est ordenada alfabticamente). A continuacin pulsar el botn "OK".

8. Con esto queda configurado inicialmente el entorno y arranca normalmente. Cada vez que
se arranca Dev-C++ se presenta una pantalla con una sugerencia. Si no se quiere que
aparezca esta pantalla, marcar la casilla "No mostrar sugerencias al inicio" que aparece en
la misma y pulsar el botn "Cerrar".

9. Con ello aparece la pantalla principal de Dev-C++.

10. Antes de empezar a trabajar con Dev-C++ es necesario ajustar alguna configuracin
adicional del compilador. Para ello, en el men "Herramientas", seleccionar la opcin
"Opciones del Compilador", con lo que se desplegar la ventana de Opciones del

Compilador.

11. En dicha ventana seleccionar la pestaa "Compilador", marcar la casilla "Adir los
siguientes comandos al llamar al compilador" y en la caja de texto que hay debajo de
dicha casilla, escribir -Wall, tal como aparece en la figura. No modificar el resto de opciones
de esta pestaa.

12. Seleccionar seguidamente la pestaa "Configuracin", y en la lista que aparece a la


izquierda seleccionar "Linker". Los parmetros de configuracin asociados aparecern en la
parte derecha. Seleccionar "Yes" en la opcin "Generar Informacin de Debug". No
modificar el resto de opciones de la pestaa.

13. Seguidamente, y en la misma pestaa "Configuracin", desplegar la opcin


"Optimizacin" pulsando sobre el signo "+" situado a su izquierda, se desplegar una nueva
opcin "Optimizaciones intensivas". Al seleccionarla aparecern las diferentes opciones de
configuracin a la derecha. Asegurarse que dichas opciones estn todas puestas a "No". Pulsar
el botn "Aceptar" para validar los cambios.

14. Por ltimo es necesario incluir una plantilla con cdigo fuente para que al abrir un nuevo
fichero fuente la inserte automticamente. Para ello seleccionar la opcin "Opciones del
Editor" del men "Herramientas", con lo que se desplegar la ventana de Opciones del
Editor.

15. En la ventana que se abre seleccionar la pestaa "Cdigo", y dentro de la misma


seleccionar en la parte inferior la pestaa "Cdigo por defecto". En la caja de texto introducir
el siguiente texto:

/*---------------------------------------------------------------| Autor:
|
| Fecha:
Versin: 1.0
|
|-----------------------------------------------------------------|
| Descripcin del Programa:
|
|
|
| ----------------------------------------------------------------*/
// Incluir E/S y Libreras Standard
#include <iostream>
#include <cstdlib>
using namespace std;
// Zona de Declaracin de Constantes
// Zona de Declaracin de Tipos
// Zona de Cabeceras de Procedimientos y Funciones
// Programa Principal
int main()
{
// Zona de Declaracin de Variables del Programa principal

system("Pause");
return 0;

// Hacer una pausa


// Valor de retorno al S.O.

// Implementacin de Procedimientos y Funciones


Puedes bajarte un fichero de texto (fichero fuente C++) con el cdigo por defecto pulsando
aqu. Una vez insertado el texto, el aspecto de la ventana ser el siguiente:

16. Finalmente marcar la opcin "Insertar Cdigo por Defecto en un Cdigo Fuente de
un Proyecto Vaco" en la parte inferior de la ventana y pulsar el botn "Aceptar" para
validar los cambios. Con esto Dev-C++ ya se encuentra listo para poder empezar a trabajar
con l.

Anda mungkin juga menyukai