3. 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
4. Lenguaje C++
• Organización de programas
– Ficheros de declaraciones (.h)
• Del sistema
• Del usuario (#ifndef .... #define ..... #endif)
– Ficheros de código fuente (.cc, .cpp)
5. 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
6. Lenguaje C++
• Operadores y sentencias
– Sentencias
• Misma sintaxis y semántica que las de C
– Operadores idem sentencias excepto:
• new, delete, delete[], ::
• <<, >>
• Sobrecarga
8. 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
9. 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;
10. 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.
11. 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};
12. 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}};
13. 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
14. 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
16. 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;
18. 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);
}
19. 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;
• }
21. 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
22. 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);
23. 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);
24. 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
25. 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
26. Lenguaje C++
Soporte para orientacion a objetos
• Funciones virtuales. Polimorfismo.
• Clases abstractas.
• Clases patrón.
• Herencia simple y múltiple.
• Encapsulado.
27. 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.
28. Lenguaje C++
• Almacenamiento de objetos
– estático (asignada al iniciarse el programa)
– automático (asociada al bloque)
– en la memoria disponible (obtenida con new)
29. 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();
};
30. 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
31. 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; }
• };
32. 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; }
• };
33. 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));
• }
34. 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;
35. 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; }
• };
36. Lenguaje C++
clases y herencia múltiple
• class DrawableString : public Point, public
DrawableObject {
• ... public:
– DrawableString(...){ ... }
– ~DrawableString() { ... } ...
• };