La
intenci�n de su creaci�n fue extender al lenguaje de programaci�n C mecanismos que
permiten la manipulaci�n de objetos. En ese sentido, desde el punto de vista de los
lenguajes orientados a objetos, el C++ es un lenguaje h�brido.
El nombre "C++" fue propuesto por Rick Mascitti en el a�o 1983, cuando el lenguaje
fue utilizado por primera vez fuera de un laboratorio cient�fico. Antes se hab�a
usado el nombre "C con clases". En C++, la expresi�n "C++" significa "incremento de
C" y se refiere a que C++ es una extensi�n de C.
�ndice
1 Ejemplos
2 Tipos de datos
2.1 Tama�os 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 Especializaci�n
4.5 Clases abstractas
4.6 Espacios de nombres
4.7 Herencia
4.7.1 Herencia simple
4.7.2 Herencia m�ltiple
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 Actualidad y futuro
9 Diferencias de tipos respecto a C
10 Compiladores
11 Ejemplo: Cmd con colores
11.1 Uso
12 Entornos de desarrollo
12.1 Bajo Microsoft Windows
12.2 Bajo MacOS
12.3 Bajo DOS
12.4 Bajo GNU/Linux
13 Cr�ticas
14 V�ase tambi�n
15 Referencias
15.1 Bibliograf�a
16 Enlaces externos
Ejemplos
A continuaci�n 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()
{
cout << "Hola mundo" << endl;
return 0;
}
Al usar la directiva #include se le dice al compilador que busque e interprete
todos los elementos definidos en el archivo que acompa�a 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
ingl�s. 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 est�ndar 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 est�ndar
(t�picamente la pantalla o una ventana de texto) y el flujo de entrada est�ndar
(t�picamente el teclado).
Tipos de datos
C++ tiene los siguientes tipos fundamentales:
Tama�os asociados
Seg�n la m�quina y el compilador que se utilice los tipos primitivos pueden ocupar
un determinado tama�o en memoria. La siguiente lista ilustra el n�mero de bits que
ocupan los distintos tipos primitivos en la arquitectura x86.
Tama�os de tipos primitivos bajo i386 (GCC)
Tipo N�mero de bits
char 8
short 16
int 32
float 32
double 64
Otras arquitecturas pueden requerir distintos tama�os de tipos de datos primitivos.
C++ no dice nada acerca de cu�l es el n�mero de bits en un byte, ni del tama�o de
estos tipos; m�s bien, ofrece solamente las siguientes "garant�as de tipos":
De acuerdo al est�ndar C99, un tipo char debe ocupar exactamente un byte compuesto
de un m�nimo de 8 bits independientemente de la arquitectura de la m�quina.
El tama�o reconocido de char es de 1. Es decir, sizeof(char) siempre devuelve 1.
Un tipo short tiene al menos el mismo tama�o que un tipo char.
Un tipo long tiene al menos el doble tama�o en bytes que un tipo short.
Un tipo int tiene un tama�o entre el de short y el de long, ambos inclusive,
preferentemente el tama�o de un apuntador de memoria de la m�quina. Su valor m�ximo
es 2147488281, usando 32 bits.
Un tipo unsigned tiene el mismo tama�o que su versi�n signed.
Wchar_t
Para la versi�n del est�ndar que se public� en 1998, se decidi� a�adir el tipo de
dato wchar_t, que permite el uso de caracteres UNICODE, a diferencia del
tradicional char, que contempla simplemente al c�digo de caracteres ASCII
extendido. A su vez, se ha definido para la mayor�a de las funciones y clases,
tanto de C como de C++, una versi�n para trabajar con wchar_t, donde usualmente se
prefija el car�cter w al nombre de la funci�n (en ocasiones el car�cter 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:
Adem�s se utiliza para determinar que una funci�n no retorna un valor, como en:
void *memoria;
Indica que memoria es un puntero a alguna parte, donde se guarda informaci�n de
alg�n tipo. El programador es responsable de definir estos "alg�n", eliminando toda
ambig�edad. Una ventaja de la declaraci�n "void *" es que puede representar a la
vez varios tipos de datos, dependiendo de la operaci�n de cast escogida. La memoria
que hemos apuntado en alguna parte, en el ejemplo anterior, bien podr�a almacenar
un entero, un flotante, una cadena de texto o un programa, o combinaciones de
estos. Es responsabilidad del programador recordar qu� tipo de datos hay y
garantizar el acceso adecuado.
La palabra "NULL"
Adem�s de los valores que pueden tomar los tipos anteriormente mencionados, existe
un valor llamado NULL, sea el caso num�rico para los enteros, car�cter para el tipo
char, cadena de texto para el tipo string, etc. El valor NULL, expresa, por lo
regular, la representaci�n de una Macro, asignada al valor "0".
Principios
Todo programa en C++ debe tener la funci�n principal main() (a no ser que se
especifique en tiempo de compilaci�n otro punto de entrada, que en realidad es la
funci�n que tiene el main())
int main()
{}
La funci�n principal del c�digo fuente main debe tener uno de los siguientes
prototipos:
int main()
int main(int argc, char** argv)
Aunque no es est�ndar algunas implementaciones permiten
int main(int argc, char** argv, char** env)
La primera es la forma por omisi�n de un programa que no recibe par�metros ni
argumentos. La segunda forma tiene dos par�metros: argc, un n�mero que describe el
n�mero 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
a�ade la posibilidad de poder acceder a las variables de entorno de ejecuci�n de la
misma forma que se accede a los argumentos del programa, pero reflejados sobre la
variable env.