C++

**C++** (pronunciado "ce máis máis" ou "ce plus plus") é unha linguaxe de programación deseñada a mediados dos 80 por Bjarne Stroustrup como extensión da linguaxe de programación C.

É unha linguaxe híbrida que se pode compilar. Resulta máis sinxela de aprender para os programadores que xa coñecen C. Actualmente existe un estándar para a linguaxe denominado *ISO C++*, ao que se adheriron a maioría dos fabricantes de compiladores máis modernos. Existen tamén algúns intérpretes como ROOT. As principais características de C++ son o soporte para programación orientada a obxectos (*herdanza*, polimorfismo, *abstracción*, *encapsulación*) e o soporte para modelos de programación xenérica (*"templates"*). C++ abrangue tres paradigmas da programación: a programación estruturada, a programación xenérica e a programación orientada a obxectos.

Os modelos defínense da seguinte maneira:

 template  declaración X

e as instancias con:

 X.

Posúe unha serie de propiedades que non se atopan en todas as linguaxe de alto nivel:

* a posibilidade de redefinir os operadores,
* a identificación de tipos en tempo de execución (*RTTI*)

*Menciónase a C++* de xeito habitual como unha linguaxe potente xa que permite o traballo tanto a niveis altos como baixos. Non obstante, é das que menos automatismos posúe. A obriga de facer case todo manualmente, ao igual que C, dificulta a súa aprendizaxe.

O nome **C++** foi proposto por Rick Masciatti no ano 1983 cando a linguaxe se empregou por vez primeira fóra dun laboratorio científico. Antes usárase o nome de "C con clases". En C, "C++" significa "C + 1", e refírese a que C++ é unha extensión de C. Algúns din que "C++" aínda significa "C", porque "++" neste caso é o operador da *post***-**incrementación, é dicir, aumenta o valor da expresión á que se refire, despois, nas instrucións seguintes. Por isto o valor da expresión neste momento permanece orixinal.

## Un exemplo 
Un exemplo de programa escrito en C++ é o seguinte:

```cpp
#include 
 int main()
 {
    std::cout 
using namespace std;

int main()
{
    Punto OMeuPunto;
    couttemplate  ** á estrutura de programación (clase, función etc.).

### Herdanza 
* Herdanza simple
* Herdanza múltiple

### Sobrecarga de operadores 
É posible definir o comportamento dun operador da linguaxe para que traballe con tipos de datos definidos polo usuario.Estes comportamentos impleméntanse do mesmo xeito que unha función, salvo que esta terá un nome especial: *Tipo de dato de devolución ***operator (parámetros)**

* Operador +
* Operador ++
* Operador -
* Operador --
* Operador =
* Operador ==
* Operador *
* Operador /
* Operador %
* Operador new
* Operador delete
* Operador ()
* Operador []

## Biblioteca estándar de modelos (**STL**) 
As linguaxes de programación adoitan ter unha serie de bibliotecas integradas para a manipulación de datos a nivel máis básico. En C++, ademais de poder usar as bibliotecas de C, pódese usar a nativa STL (Standard Template Library), propia da linguaxe. Proporciona unha serie de clases parametrizadas (véxase máis arriba modelos) que permite efectuar operacións sobre o almacenado de datos, procesado e fluxos de entrada/saída. A STL é máis un conxunto de bibliotecas ca unha soa. Desta forma unicamente se inclúen no ficheiro executable final aquelas que sexan necesarias para a aplicación que se estea programando, reducindo drasticamente o uso innecesario de memoria.

### ostreams / istreams 
Cabe destacar as clases **basic_ostream** e**basic_stream**, e os obxectos **cout** e **cin**, pertencentes a estas clases, respectivamente. Proporcionan a entrada e saída estándar de datos (teclado/pantalla). Tamén está dispoñible **cerr**, similar a cout, usado para a saída estándar de erros. Estas clases teñen sobrecargados os operadores >, respectivamente, co obxecto de seren útiles na inserción/extracción de datos a ditos fluxos. Son operadores intelixentes, xa que son capaces de adaptarse ao tipo de datos que reciben, aínda que teremos que definir o comportamento de dita entrada/saída para clases/tipos de datos definidos polo usuario. Por exemplo:

```cpp
ostream& operator>. Exemplos:

```cpp
ostringstream s;
s > nome >> idade >> estatura >> p;
```

### Contedores 
Son clases modelos ("template") especiais utilizadas para almacenar tipos de datos xenéricos, sexan cales sexan. Segundo a natureza do almacenado, dispoñemos de varios tipos:
* Vectores: defínense por

```cpp
vector nome_do_vector;
```
Equivalen aos arrays de calquera linguaxe, con diversas excepcións. Teñen tamaño dinámico, co que se poden inserir elementos aínda que o vector estea cheo. A diferenza dos vectores clásicos a baixo nivel de C, tamén poden lanzar excepcións se se accede a un elemento co rango fóra do vector en cuestión, usando, en vez do operador *[]*, o método *at()*.

* Colas dobres.
* Listas.
* Adaptadores de secuencia.
* Contedores asociativos: *map* e *multimap*.
* Contedores asociativos: *set* e *multiset*.

Métodos comúns e non comúns entre os contedores da **STL**.

### Iteradores 
Poden considerarse como unha xeneralización da clase de "punteiro". Un iterador é un tipo de dato que permite o percorrido e a busca de elementos nos contedores. Como as estruturas de datos (contedores) son clases xenéricas, e os operadores (algoritmos) que deben operar sobre elas son tamén xenéricos (funcións xenéricas), Stepanov e os seus colaboradores tiveron que desenvolver o concepto de iterador como elemento ou nexo de conexión entre ambos os dous. O novo concepto resulta ser unha especie de punteiros que sinalan aos diversos membros do contedor (punteiros xenéricos que como tales non existen na linguaxe).

## Compiladores 
Un dos compiladores de C++ máis completos é o de GNU: o compilador G++. Este é parte do proxecto Gcc, que engloba varios compiladores para distintas linguaxes.

Actualmente os compiladores máis comúns que se poden atopar para C++ no sistema operativo Windows son Visual C++ e MinGW. Visual C++ pertence a Microsoft e é de pago, mentres que MinGW é unha versión do compilador de GNU adaptada para este sistema operativo. Dev-C++ é un IDE de libre distribución para este compilador e pode ser descargado da súa web oficial Bloodshed gratuitamente.Tamén existe DJGPP, aínda que actualmente está en desuso.

## Notas 
## Véxase tamén 
### Ligazóns externas 
* cplusplus resources (inglés)