C++ es un lenguaje de programación diseñado a mediados de
los años 1980 por Bjarne Stroustrup. La intención de su creación fue el
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.
Posteriormente se añadieron facilidades de programación
genérica, que se sumaron a los paradigmas de programación estructurada y
programación orientada a objetos. Por esto se suele decir que el C++ es un
lenguaje de programación multiparadigma.
Actualmente existe un estándar, denominado ISO C++, al que
se han adherido la mayoría de los fabricantes de compiladores más modernos.
Existen también algunos intérpretes, 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 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.
Tipos de datos
C++ tiene los siguientes tipos fundamentales:
Caracteres: char
(también es un entero), wchar_t
Enteros: short,
int, long, long long
Números en coma
flotante: float, double, long double
Booleanos: bool
Vacío: void
El modificador unsigned se puede aplicar a enteros para
obtener números sin signo (por omisión los enteros contienen signo), con lo que
se consigue un rango mayor de números naturales.
Tamaños asociados
Tamaños de tipos primitivos bajo i386 (GCC)
Tipo
Número de Bits
char
8
short
16
int
32
float
32
double
64
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.
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.
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:
typedef unsigned short wchar_t;
Mientras que en C++ es en sí mismo un tipo de dato.
La palabra reservada "void"
La palabra reservada void define en C++ el concepto de no
existencia o no atribución de un tipo en una variable o declaración. Es decir,
una función declarada como void no devolverá ningún valor. Esta palabra
reservada también puede usarse para indicar que una función no recibe
parámetros, como en la siguiente declaración:
int funcion (void);
Aunque la tendencia actual es la de no colocar la palabra
"void".
Además se utiliza para determinar que una función no retorna
un valor, como en:
void funcion (int parametro);
Cabe destacar que void no es un tipo. Una función como la
declarada anteriormente no puede retornar un valor por medio de return: la
palabra clave va sola. No es posible una declaración 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 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 éstos. 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, caracter 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".
Tenemos entonces que:
void* puntero = NULL;
int entero = NULL;
bool boleana = NULL;
char caracter = NULL;
El valor de las variables anteriores nos daría 0. A
diferencia de la variable "caracter", que nos daría el equivalente a
NULL, '\0', para caracteres.
No hay comentarios:
Publicar un comentario