2. Lenguaje C++
Introducción
B. Stroustrup, mediados de los 80, AT&T
Paso de la programación tradicional (C) a estilos de
abstracción de datos y orientación a objetos
Conserva características del C y añade nuevos conceptos
4. Lenguaje C++
Extensiones respecto al C
No orientadas a objeto
Mejoras en entrada/salida - streams
Sobrecarga de funciones y operadores
Parámetros por defecto. Referencias
5. Lenguaje C++
Organización de programas
Ficheros de declaraciones (.h)
Del sistema
Del usuario (#ifndef .... #define ..... #endif)
Ficheros de código fuente (.cc, .cpp)
6. Lenguaje C++
Scope (alcance)
Fichero: declaraciones que no pertenecen a función o
clase alguna
Función: etiquetas
Local: cualquier nombre declarado en un bloque pertenece
al bloque.
Clase: declaraciones asociadas a una clase
Cada variable tiene un
“scope” o un contexto
7. Lenguaje C++
Operadores y sentencias
Sentencias
Misma sintaxis y semántica que las de C
Operadores idem sentencias excepto:
new, delete, delete[], ::
<<, >>
Sobrecarga
9. Lenguaje C++
Elementos del programa
COMENTARIOS
// Comentario de una sola línea
/* Comentario multilínea */
BLOQUES DE CÓDIGO
{ Todos los bloques de código van
entre corchetes }
FIN DE LINEA
Todas las instrucciones terminan con
un punto y coma
10. Lenguaje C++
Tipo básico de datos
Tipo de dato bool tiene dos
valores asociados true o false
DECLARACIÓN DE UNA VARIABLE
<Tipo de dato>
Nombre_variable;
INICIALIZACION DE UNA
VARIABLE
<Tipo de dato>
Nombre_variable = [valor];
EJEMPLO:
int variable1;
bool variable2=true;
11. Lenguaje C++
Tipo básico de datos
Variables y aritmética.
Todo nombre y/o expresión tiene un tipo.
El tipo determina las operaciones que se pueden
realizar con el.
Conversiones implícitas.
En asignaciones y operaciones algebraicas el lenguaje
lleva a cabo todas las conversiones implícitas que
faciliten el uso y sean seguras.
12. Lenguaje C++
Arreglos
Un arreglo es un conjunto de tipos de datos básicos
DECLARACIÓN DE UN ARREGLO
<Tipo de dato básico> Nombre_variable[Número de
elementos];
INICIALIZACION DE UN ARREGLO
<Tipo de dato> Nombre_variable = {valor1, valor2, …,
valorN}];
EJEMPLO:
char arreglo1[10];
float arreglo2={1.5, 2.3, 6,7};
13. Lenguaje C++
Arreglos Multidimencionales
DECLARACIÓN DE UN ARREGLO MULTIDIMENCIONAL
<Tipo de dato básico> Nombre_variable[Número
de elementos][Numero de elementos];
INICIALIZACION DE UN ARREGLO
MULTIDIMENCIONAL
<Tipo de dato> Nombre_variable = { {valor1,
valor2, …, valorN}, {valor1, valor2, …, valorN} };
EJEMPLO:
char arreglo1[10][10];
int arreglo2[]={{1,2,3},{4,5,6}{7,8,9}};
14. Lenguaje C++
Apuntadores y vectores
Punteros y vectores.
char v[10]; //vector de 10 caracteres (0 a 9)
char *p; // puntero a un carácter
p = &v[3]; //p apunta al cuarto elemento de v
punteros - operaciones asociadas
int *p; //puntero a entero
int **p; //puntero a puntero a entero
int (*vp) [10]; //puntero a vector de 10 enteros
int (*fp) ( char, char *);// puntero a función
15. Lenguaje C++
Tipos definidos por el usuario
ESTRUCTURAS (Registros)
struct date_s {
int day, month, year;
} aDate;
La definición de arriba de aDate es también la
declaración de una estructura llamada date_s.
Podemos definir otras variables de este tipo
referenciando la estructura por el nombre:
struct date_s anotherDate;
Enumeraciones
Clases
17. Lenguaje C++
Operadores
Los operadores de
incremento ++ y --
pueden ser explicados
por medio del siguiente
ejemplo. Si tienes la
siguiente secuencia de
instrucciones
a = a + 1; b = a;
Se puede puedes usar
b = a++;
b = ++a;
19. Lenguaje C++
Sobrecarga de operadores
class complex {
double re, im;
public:
complex(double r, double i) : re(r), im(i){}
complex operator+(complex);
complex operator*(complex);
bool operator==(complex);
bool operator<(complex);
};
void f()
{ complex a(1, 3.1);
complex b(1.2, 2);
complex c = b;
if(a==b)
a = b + c;
b = b + c * a;
c = a * b + complex(1,2);
}
20. Lenguaje C++
Funciones
Regulares (similares a una función C).
Miembros (asociadas a una clase).
Nombre, lista de argumentos, tipo de retorno y cuerpo.
int miFuncion(int a); //firma o declaración
int miFuncion(int a){ //definición
cout<<a;
}
22. Lenguaje C++
Funciones
Paso de argumentos
Por valor - seguridad
copiado en el almacenamiento local de la función
la función accede a la copia
Por referencia - velocidad - retornos múltiples
se copia la dirección del objeto que se esta pasando
la función accede al objeto
Por referencia constante - seguridad + velocidad
Vectores: paso por referencia
23. Lenguaje C++
Funciones
Paso de argumentos
Por valor
char a = ‘a’;
miFuncion(a);
Por referencia
char a = ‘a’;
miFuncion(&a);
Vectores: paso por referencia
char a[] = {‘a’,’b’}
miFuncion(a);
24. Lenguaje C++
Funciones
Sobrecarga de nombres.
int max(int, int);
int max( int, int, int);
int max(int *, int);
int max(float, int);
int max(int, float);
25. Lenguaje C++
Soporte para abstracción de datos
Definición de un conjunto de operaciones
asociadas a un tipo.
Restricción del conjunto de operaciones que
se pueden realizar sobre un tipo a las
definidas para el mismo.
CLASE
nombre
datos miembros
funciones miembro
control de acceso
26. Lenguaje C++
Soporte para abstracción de
datos
Inicialización y destrucción.
Inicialización y asignación.
Patrones.
Conversiones de tipo
complex a = complex(1);
Múltiples implementaciones
27. Lenguaje C++
Soporte para orientacion a
objetos
Funciones virtuales. Polimorfismo.
Clases abstractas.
Clases patrón.
Herencia simple y múltiple.
Encapsulado.
28. Lenguaje C++
Los objetos se crean al llegar a su definición.
Los objetos se destruyen cuando salen del bloque.
Los objetos globales se crean una sola vez y se destruyen al terminar el
programa.
Los objetos static son similares a los globales.
29. Lenguaje C++
Almacenamiento de objetos
estático (asignada al iniciarse el programa)
automático (asociada al bloque)
en la memoria disponible (obtenida con new)
30. Lenguaje C++
Clases.
Tipo abstracto de datos definido por el usuario
Interface e implementación
class X {
private:
int i;
public:
f();
protected:
g();
};
struct X {
private:
int i;
public:
f();
protected:
g();
};
31. Lenguaje C++
clases
Constructores
Funciones con el mismo nombre de la clase pero que no
retornan nada.
Constructor de copia
Constructor por defecto
Constructores como conversores de tipo
Destructores
virtuales
32. Lenguaje C++
clases
CONSTRUCTORES
class Point {
int _x, _y;
public: Point() { _x = _y = 0; }
void setX(const int val);
void setY(const int val);
int getX() { return _x; }
int getY() { return _y; }
};
33. Lenguaje C++
clases
DESTRUCTORES
class Point {
int _x, _y;
public:
Point() { _x = _y = 0; }
Point(const int x, const int y) { _x = x; _y = y; }
~Point() { /* ¡Nada qué hacer! */ }
void setX(const int val);
void setY(const int val);
int getX() { return _x; }
int getY() { return _y; }
};
34. Lenguaje C++
clases
Friend
Nosotros podemos definir que funciones o clases sean amigos de una clase
para permitirles acceso directo a sus miembros de datos privados. Por
ejemplo, que la función para el operador + tuviese acceso a los miembros de
datos privados _real e _imag de la clase Complex. Con ese fin declaramos que
el operador + sea amigo de la clase Complex:
class Complex {
... public: ...
friend Complex operator +( const Complex &, const Complex & );
};
Complex operator +(const Complex &op1, const Complex &op2) {
double real = op1._real + op2._real, imag = op1._imag + op2._imag;
return(Complex(real, imag));
}
35. Lenguaje C++
clases
Construcción de objetos
automáticos
variables locales: se ejecuta su constructor cada vez
que el programa pasa por la declaración
secuencia de construcción - destrucción
inicialización y asignación
en memoria disponible
new, delete
int* ip = new int(7);
delete ip;
int* iap = new int[10];
delete [] iap;
36. Lenguaje C++
clases y herencia
class Point3D : public Point {
int _z;
public:
Point3D() { setX(0); setY(0); _z = 0; }
Point3D(const int x, const int y, const int z) {
setX(x); setY(y); _z = z; }
~Point3D() { /* Nada que hacer */ }
int getZ() { return _z; }
void setZ(const int val) { _z = val; }
};
37. Lenguaje C++
clases y herencia múltiple
class DrawableString : public Point, public DrawableObject {
... public:
DrawableString(...){ ... }
~DrawableString() { ... } ...
};