Varios
P M T e m a
2004
Introducción a la POO en C++ Algunas diferencias entre C y C++ Objetos, métodos, encapsulado.
2
Clases Métodos Constructores y Destructores Sobrecarga Amigos Entrada y salida en C++ Espacios de nombres Miembros estáticos
PM. 2. POO (1)
Características de la POO en C++
Respecto a la POO, las características más importantes de C++ son:
• • • • • •Herencia múltiple Sobrecarga de operadores y funciones Derivación Funciones virtuales Plantillas Gestión de excepciones
PM. 2. POO (2)
Pequeñas diferencias C-C++ (1) Argumentos con valor por defecto
int a(int a=1, int b=2, int c)
a(4,5) ??
NO
int a(int c, int a=1, int b=2)
hace que a(1), ó a(1,2) ó a(1,2,3) no sean ambiguos
PM. 2. POO (3)
Pequeñas diferencias C-C++ (2)
Funcionesinline frente a macros de preprocesador supongamos definido
#define cuadrado(x) (x*x) entonces void f(double d, int i) { r = cuadrado(d); // va bien r = cuadrado(i++); // va mal: significa (i++*i++); r = cuadrado(d+1); // va mal: significa (d+1*d+1); // que es, (d+d+1);
iría mejor
#define cuadrado(x) ((x)*(x)) // va mejor
PM. 2. POO (4)
Pequeñas difs. C-C++: funciones inline Pero siguesin resolver cuadrado(i++) Así que C++ aporta una solución: inline int icuadrado(int x) { return x * x; }
que expande C++ (no el procesador), sí resuelve el problema:
es como una función normal pero que se expande entre las líneas del código que la llama
PM. 2. POO (5)
Pequeñas difs. C-C++: funciones inline
La ventaja de las funciones inline es que no retrasan con llamadas a función. Sonexpresiones que se repinten en el código y no se quieren convertir en función para no recargar el número de llamadas a función.
icuadrado(i++) // va bien
PM. 2. POO (6)
C no tiene parámetros por referencia C
void swap(int *pa, int *pb) { int t = *pa; *pa=*pb; *pb=t; } main() { swap(&x, &y);}
C++
void swap(int & a, int & b) { int t = a; a=b; b=t; } main() { swap(x, y);}
Elmodificador & en los parámetros formales en C++ indica que ese parámetro es pasado por referencia. Algo que en C es imposible. En C no existía el paso por referencia, había que pasar la dirección (operador &) de la variable.
PM. 2. POO (7)
Operadores new y delete
int *pint, *parr; pint = new int; parr = new int[10] // … delete pint; delete[] parr;
Son operadores y por lo tanto el compiladorinterviene "inteligentemente" decidiendo el tipo de solicitud de memoria dinámica y el tamaño necesitado. Esto es más adecuado en la creación de objetos
PM. 2. POO (8)
Operadores new y delete, ventajas • No hace falta calcular los tamaños con sizeof():
pa = new int; // malloc(sizeof(int))
• El propio delete se encarga de poner a 0 (NULL) el puntero y new de poner a 0 la memoria adquirida
deletepint; // deja 0 modificando pint
// antes era: free(pint); pint=NULL;
PM. 2. POO (9)
Equivalencia entre new y malloc
truco en C #define NEW(X) (X *) malloc(sizeof(X)) pa = NEW(X); equivale en C++ a pa = new X;
PM. 2. POO (10)
Classes
• La mayor diferencia entre C y C++ está en soporte que este último ofrece para las clases • El nombre original de C++ era "C with Classes" •Esencialmente una clase es un tipo abstracto de datos (TAD): colección de datos junto a operadores
para acceder y modificarlos
PM. 2. POO (11)
Clases, uso Se puede definir una clase "Complejo" y variables de tipo Complejo: Complejo c1, c2, c3; y entonces seguir operando no sólo con funciones sino también con operadores: c3 = c1 / c2; c3 = c1 + c2; c3++;… en la que "/", "+", "++" se hansobredefinido para operar con Complejo.
PM. 2. POO (12)
Clases, declaración La declaración es muy parecida a la declaración de estructuras, de la que son extensión: class Complejo { float parteReal; float parteImaginaria; };
PM. 2. POO (13)
Clases, declaración La declaración es muy parecida a la declaración de estructuras, de la que son extensión: class Complejo { float parteReal; float...
Regístrate para leer el documento completo.