Está en la página 1de 4

C++11

C++11
Programacin Orientada a Objeto Ing. Civil en Telecomunicaciones

Versin de C++ definida en estndar ISO/IEC 14882:2011 de Sept. 2011


Supersede al borrador del estndar C++0X

Facilitar el uso y aprendizaje de C++ Mejorar desempeo Mantener compatibilidad y estabilidad Mejorar mecanismos de abstraccin Mejorar seguridad de tipos de datos

Tipo de dato long long int


C++11 define tipo long long int
Largo garantizado al menos 64 bits Estndar C99 ya inclua este tipo de dato

Tipo de dato auto


Tipo de dato auto permite que el compilador infiera el tipo de una variable de la inicializacin
std::vector<int>::iterator iter = v.begin();

Puede escribirse como


auto iter = v.begin();

Compilador deduce que iter tiene tipo


std::vector<int>::iterator

Ejemplos de tipo de dato auto


Tipo de dato auto
auto auto auto auto // // // // // vector<int> v[5]; auto b = v[0]; // x y z t = = = = 5; 5.5; y; H; x tiene tipo int y tiene tipo double z tiene tipo double t tiene tipo const char * b tiene tipo int

Operador decltype
Operador decltype puede ser usado para determinar el tipo de una expresin en tiempo de compilacin
decltype(5) x; // x tiene tipo int decltype(x) y = 6; // y tiene tipo int vector<int> v[5]; decltype(v[0]) b = 1; // b tiene tipo const int&, que es lo // que retorna vector<int>::operator[]

2012 Mario Medina C.

Tipo nullptr
En C y C++03, 0 es un entero constante y un puntero a NULL
int *p = 1; // Error! int *q = 0; // Valido

Clases enum
enum Pera { BOSC, BARTLETT }; enum Manzana { PINKLADY, GALA }; Pera a = BOSC; Manzana b = GALA; x = (a == b) ? 0 : 1;

En C++11, se define nullptr para representar un puntero a NULL


int *q = nullptr; // Valido int *q = 0; // Sigue siendo valido

C++03 trata las enumeraciones como enteros aun cuando sus tipos sean diferentes
Es posible comparar

peras y manzanas!
C++11 introduce

clases enum

Clases enum
enum class Pera { BOSC, BARTLETT }; enum class Manzana { PINKLADY, GALA }; Pera a = Pera::BOSC; Manzana b = Manzana::GALA; x = (a == b) ? 0 : 1; // Error de compilacion

Ciclos for con rango


C++11 introduce ciclos for con rango
for (vector<int>::iterator itr = v.begin(); itr != v.end(); ++itr)

puede reemplazarse por


for (auto itr = v.begin(); itr != v.end(); ++itr)

que puede reemplazarse por


for (auto x: v) { // x es solo lectura cout << x; }

Ciclos for con rango


Qu pasa si se quiere modificar la variable en un ciclo for con rango? Hacer que x sea una referencia
for (auto& x: v) { // x es solo lectura cout << x++; }

Constructores encadenados
C++11 permite encadenar constructores
Hacer que un constructor de una clase llame

a otro constructor de la misma clase C++03 C++11

ciclo for con rango funciona en vectores de C y todo contenedor que soporte begin() y end()

class f { f() { // Hace A } f(int v) { // Hace A // Hace B };

class f { f() { // Hace A } f(int v): f() { // Hace B };

2012 Mario Medina C.

Inicializadores de objetos via listas


C++03 tiene inconsistencias en la inicializacin de objetos via listas
int vect[5] = {0, 1, 2, 3, 4}; // valido vector<int> vec[5] = {0, 1, 2, 3, 4}; // No!

override de funciones virtuales


En C++03, es posible crear accidentalmente una nueva funcin virtual, cuando en realidad uno slo se propuso sobrecargar una funcin de la clase base.
Comando override designa funciones

nueva clase std::initializer_list de C++11 permite hacer lo indicado Clases estndar de STL ya incluyen esta funcionalidad

derivadas virtuales que explcitamente sobreescriben funciones virtuales de la clase base

override de funciones virtuales


Ejemplo:
class Base { virtual void f1(double); }; class Derivada : Base { virtual void f1(int); };

Clases final
Comando final impide la herencia de clases o la sobrecarga de funciones especficas.
class Base final { }; class Derivada : Base { // Error! };

Se quera sobrecargar f1() pero por error se

utiliz un argumento de distinto tipo

Compilador detecta el error si se escribe


virtual void f1(int) override;

Clase Base es inmutable: no puede tener

clases derivadas

Funcin virtual final


No puede sobrecargarse una funcin final
class Base { virtual void f1(double) final; }; class Derivada : Base { virtual void f1(double); // Error! void f1(int); // Correcto };

Borrado de funciones
Comando delete impide la definicin invocacin de funciones
class f { // Borra el operador de asignacion f& operator=(const f&) = delete; // Borra el constructor de copia f(const f&) = delete; };

Previene que funciones de clases derivadas utilicen esa precisa combinacin de nombres y parmetros

Al borrar el operador de asignacin y el

constructor de copia, se cre un objeto incopiable

2012 Mario Medina C.

Borrado de funciones
Comando delete tambin impide la invocacin de funciones especficas
class f { void f1(long long int); void f1(long) = delete; };

Compilando C++11
Compiladores g++ v4.3 a 4.6 incluyen soporte parcial para C++0X
C++0X es el draft anterior del estndar C++11

Compilador g++ v4.7 incluye soporte (parcial) para estndar C++11


Ejemplo de uso
g++ -std=c++11 prog.cpp o prog

Impide la invocacin de f.f1() con

argumentos de tipo char, int o long. Slo se aceptan argumentos de tipo long long

Code::Blocks v12.11 usa compilador g++ v.4.7.1


Activar opcin en Settings Compiler Compiler

Flags

2012 Mario Medina C.

También podría gustarte