C++ ye un llinguaxe de programación diseñáu a mediaos de los años 1980 por Bjarne Stroustrup. La intención de la so creación foi l'estender al llinguaxe de programación C mecanismos que dexen la manipulación d'oxetos. Nesi sentíu, dende'l puntu de vista de los llinguaxes empobinaos a oxetos, el C++ ye un llinguaxe híbridu.
Darréu añadiéronse facilidaes de programación xenérica, que se sumaron a los paradigmes de programación estructurada y programación empobinada a oxetos. Por esto suel dicir que'l C++ ye un llinguaxe de programación multiparadigma.
Anguaño esiste un estándar, denomináu ISO C++, al que se xuntaron la mayoría de los fabricantes de compiladores más modernos. Esisten tamién dellos intérpretes, tales como ROOT.
Una particularidá del C++ ye la posibilidá de redefinir los operadores, y de poder crear nuevos tipos que se porten como tipos fundamentales.
El nome "C++" foi propuestu por Rick Mascitti nel añu 1983, cuando'l llinguaxe foi utilizáu per primer vegada fuera d'un llaboratoriu científicu. Antes usárase'l nome "C con clases". En C++, la espresión "C++" significa "medría de C" y refierse a que C++ ye una estensión de C.
Exemplos De siguío cítase un programa d'exemplu Hola mundu escritu en C++:
/* Esta cabecera dexa usar los oxetos que encapsulan los descriptores stdout y stdin: cout(<<) y cin(>>)*/ #include <iostream>
using namespace std;
int main() { cout << "Hola mundu" << endl; return 0; }
Al usar la direutiva #include dízse-y al compilador que busque ya interprete tolos elementos definíos nel archivu qu'acompaña la direutiva (nesti casu, iostream). Pa evitar sobrescribir los elementos yá definíos al pone-yos igual nome, creáronse los espacios de nomes o namespace del singular n'inglés. Nesti casu hai un espaciu de nomes llamáu std, que ye onde s'inclúin les definiciones de toles funciones y clases que conformen la biblioteca estándar de C++. Al incluyir la sentencia using namespace std tamos diciéndo-y al compilador que vamos usar l'espaciu de nomes std polo que nun vamos tener qu'incluyilo cuando usemos elementos d'esti espaciu de nomes, como pueden ser los oxetos cout y cin, que representen el fluxu de salida estándar (típicamente la pantalla o una ventana de testu) y el fluxu d'entrada estándar (típicamente'l tecláu).
La definición de funciones ye igual qu'en C, sacante pola carauterística de que si main nun va recoyer argumentos, nun tenemos por qué pone-y los, a diferencia de C, onde había que ponelos explícitamente, anque nun se fueren usar. Queda solo comentar que'l símbolu << conozse como operador d'insertamientu, y grosso modo ta unviando a cout lo que queremos amosar por pantalla por que lo pinte, nesti casu la cadena "Hola mundu". El mesmu operador << puede usase delles vegaes na mesma sentencia, de forma que gracies a esta carauterística vamos poder concatenar l'oxetu endl a la fin, que'l so resultáu va ser imprimir una torna de llinia.
Tipos de datos C++ tien los siguientes tipos fundamentales: Calteres: char (tamién ye un enteru), wchar_t Enteros: short, int, long, long long Númberos en coma flotante: float, double, long double Booleanos: bool Vacíu: void
El modificador unsigned puede aplicase a enteros pa llograr númberos ensin signu (por omisión los enteros contienen signu), colo que se consigue un rangu mayor de númberos naturales.
Tamaños asociaos + Tamaños de tipos primitivos so i386 (GCC)Tipu Númberu de bitschar 8short 16int 32float 32double 64
Según la máquina y el compilador que s'utilice los tipos primitivos pueden ocupar un determináu tamañu en memoria. La siguiente llista ilustra'l númberu de bits qu'ocupen los distintos tipos primitivos na arquiteutura x86.
Otres arquitectures pueden riquir distintos tamaños de tipos de datos primitivos. C++ nun diz nada alrodiu de cuál ye'l númberu de bits nun byte, nin del tamañu d'estos tipos; más bien, ufierta solamente les siguientes "garantíes de tipos":
D'alcuerdu al estándar C99, un tipu char tien d'ocupar esautamente un byte compuestu d'un mínimu de 8 bits independientemente de l'arquiteutura de la máquina. El tamañu reconocíu de char ye de 1. Esto ye, sizeof(char) siempres devuelve 1. Un tipu short tien siquier el mesmu tamañu qu'un tipu char. Un tipu long tien siquier el doble tamañu en bytes qu'un tipu short. Un tipu int tien un tamañu ente'l de short y el de long, dambos inclusive, preferentemente el tamañu d'un apuntador de memoria de la máquina. El so valor máximu ye 2147488281, usando 32 bits. Un tipu unsigned tien el mesmu tamañu que la so versión signed.
Wchar_t Pa la versión del estándar que se publicar en 1998, decidió añader el tipu de datu wchar_t, que dexa l'usu de calteres Unicode, a diferencia del tradicional char, que contempla a cencielles al códigu de calteres ASCII estendíu. De la mesma, definióse pa la mayoría de les funciones y clases, tanto de C como de C++, una versión pa trabayar con wchar_t, onde usualmente se prefija el calter w al nome de la función (n'ocasiones el calter ye un infixu). Por casu:
strcpy - wstrcpy std::string - std::wstring std::cout - std::wcout
Cabo resaltar qu'en C se define wchar_t como:
typedef unsigned short wchar_t;
Ente qu'en C++ ye en sí mesmu un tipu de datu.
La pallabra reservada "void" La pallabra reservada void define en C++ el conceutu de non esistencia o non atribución d'un tipu nuna variable o declaración. Esto ye, una función declarada como void nun va devolver nengún valor. Esta pallabra reservada tamién puede usase pa indicar qu'una función nun recibe parámetros, como na siguiente declaración:
int funcion (void); Anque l'enclín actual ye la de nun asitiar la pallabra "void".
Amás utilízase pa determinar qu'una función nun retorna un valor, como en: void funcion (int parametru);
Hai de solliñar que void nun ye un tipu. Una función como la declarada enantes nun puede retornar un valor per mediu de return: la pallabra clave va sola. Nun ye posible una declaración del tipu: void t; //Ta mal
Nesti sentíu, void portar de forma llixeramente distinta a como lo fai en C, especialmente tocantes al so significáu en declaraciones y prototipos de funciones.
Sicasí, la forma especial void * indica que'l tipu de datos ye un punteru. Por casu:
void *memoria;
Indica que memoria ye un punteru a dalguna parte, onde se guarda información de dalgún tipu. El programador ye responsable de definir estos "dalgún", esaniciando toa ambigüedá. Una ventaya de la declaración "void *" ye que puede representar al empar dellos tipos de datos, dependiendo de la operación de cast escoyida. La memoria qu'apuntemos ayundes, nel exemplu anterior, bien podría almacenar un enteru, un flotante, una cadena de testu o un programa, o combinaciones d'estos. Ye responsabilidá del programador recordar qué tipu de datos hai y garantizar l'accesu fayadizu.
La pallabra "NULL" Amás de los valores que pueden tomar los tipos enantes mentaos, esiste un valor llamáu NULL, seya los casu numbéricu pa los enteros, calter pal tipu char, cadena de testu pal tipu string, etc. El valor NULL, espresa, polo regular, la representación d'una Macro, asignada al valor "0".
Tenemos entós que:
void* piqueru = NULL; int enteru = NULL; bool boleana = NULL; char caracter = NULL;
El valor de les variables anteriores daríanos 0. A diferencia de la variable "caracter", que nos daría l'equivalente a NULL, '\0', pa calteres.
Principios Tou programa en C++ tien de tener la función principal main() (sacantes que se especifique en tiempu de compilación otru puntu d'entrada, qu'en realidá ye la función que tien el main()) int main()
La función principal del códigu fonte main tien de tener unu de los siguientes prototipos: int main() int main(int argc, char** argv)
Anque nun ye estándar delles implementaciones dexen int main(int argc, char** argv, char** env)
La primera ye la forma por omisión d'un programa que nun recibe parámetros nin argumentos. La segunda forma tien dos parámetros: argc, un númberu que describe'l númberu d'argumentos del programa (incluyendo'l nome del programa mesmu), y argv, un punteru a un array de punteros, de argc elementos, onde l'elementu argv[i] representa'l i-ésimo argumentu apurríu al programa. Nel tercer casu añader la posibilidá de poder aportar a les variables de redolada d'execución de la mesma forma que s'apuerta a los argumentos del programa, pero reflexaos sobre la variable env.
El tipu de torna de main ye un valor enteru int. Al rematar la función main, tien d'incluyise'l valor de torna (por casu, return 0;, anque l'estándar preve solamente dos posibles valores de torna: EXIT_SUCCESS y EXIT_FAILURE, definíes nel archivu cstdlib), o salir per mediu de la función exit. Alternativamente puede dexase en blancu, y nesi casu el compilador ye responsable d'amestar la salida fayadiza.
El conceutu de clase
Los oxetos en C++ son abstraídos por aciu una clase. Según el paradigma de la programación empobinada a oxetos un oxetu consta de:
Identidá, que lo estrema d'otros oxetos (Nome que va llevar la clase a la que pertenez dichu oxetu). Métodos o funciones miembro # Atributo o variables miembru
Un exemplu de clase que podemos tomar ye la clase perru. Cada perru comparte unes carauterístiques (atributos). El so númberu de pates, el color de la so pelame o'l so tamañu son dalgunos de los sos atributos. Les funciones que la faigan llatir, camudar el so comportamientu... eses son les funciones de la clase.
Este ye otru exemplu d'una clase:
class Puntu {
//per omisión, los miembros son 'private' por que solo puedan modificar dende la mesma clase. private: // Variable miembru privada int id; protected: // Variables miembru protexíes int x; int y; public: // Constructor Puntu(); // Destructor ~Puntu(); // Funciones miembru o métodos int ObtenerX(); int ObtenerY();
Constructores
Son unos métodos especiales que s'executen automáticamente al crear un oxetu de la clase. Na so declaración nun s'especifica'l tipu de datu que devuelven, y tienen el mesmu nome que la clase a la que pertenecen. Al igual qu'otros métodos, puede haber dellos constructores sobrecargados, anque nun pueden esistir constructores virtuales.
Como carauterística especial a la d'implementar un constructor, xusto dempués de la declaración de los parámetros, atópase lo que se llama "llista de inicializadores". El so oxetivu ye llamar a los constructores de los atributos que conformen l'oxetu a construyir.
Hai de solliñar que nun ye necesariu declarar un constructor al igual qu'un destructor, pos el compilador puede facer, anque nun ye la meyor forma de programar.
Tomando l'exemplu de la Clase Puntu, si deseyamos que cada vez que se cree un oxetu d'esta clase les coordenaes del puntu sían igual a cero podemos amestar un constructor como s'amuesa de siguío:.
class Puntu {
public:
float x; // Coordenaes del puntu float y;
// Constructor Puntu() : x(0), y(0){ // Inicializamos les variables "x" y "y"
// Main pa demostrar el funcionamientu de la clase
# include <iostream> // Esto déxanos utilizar "cout"
using namespace std;
int main () { Puntu MiPunto; // creamos un elementu de la clase Puntu llamáu MiPunto
cout << "Coordenada X: " << MiPunto.x << endl; // amosemos el valor acumuláu na variable x cout << "Coordenada Y: " << MiPunto.y << endl; // amosemos el valor acumuláu na variable y getchar(); // indicámos-y al programa qu'espere al buffer d'entrada (detenese) return 0; }
Si compilamos y executamos l'anterior programa, llogramos una salida que tien de ser similar a la siguiente:
Coordenada X: 0 Coordenada Y: 0
Esisten dellos tipos de constructores en C++:
Constructor predeterminado. Ye'l constructor que nun recibe nengún parámetru na función. Si nun se definiera nengún constructor, el sistema apurriría unu predeterminado. Ye necesariu pa la construcción d'estructures y contenedores de la STL.