POO en C++
Enviado por Sebastián Cueva • 17 de Junio de 2019 • Apuntes • 1.495 Palabras (6 Páginas) • 190 Visitas
Punteros: es una variable entera que apunta a otra área de memoria. Entera porque no hay subíndices decimales o negativos. Es una dirección del valor de otra variable. Los valores de los punteros son valores enteros interpretados como hexadecimales. Todas las variables declaradas tienen su dirección.
- Se manejan dos operadores, * y &.
Operador | * | & |
Declaración | Define puntero | Define referencia |
Ejecución | Contenido de | Dirección de |
*Ejecución es después del igual.[pic 1]
*Se asigna un espacio de memoria diferente en cada compilación.
Dirección Simbólica | Dirección Numérica | Contenido |
a | 0x7fff5c13978c | 7 |
aPtr | 0x7fff5c13978c | 0x7fff5c13978c (diferente) |
int a = 7;
int b = -34;
int *aPtr;
aPtr = &a; Apunta a (a).
aPtr = &b; Ahora apunta a (b);
int &aRef; Referencia, puntero que no puede moverse.
Int b = -34;
Int &aRef = b;
aRef = b; pero no apuntan a lo mismo.
Paso por valor: la variable se genera en una copia. (usar funciones normalmente)
Paso por referencia: se comparten aéreas de memoria (notación de punteros y referencia). Se comparte el mismo espacio de memoria.
Notación de punteros: Sea una función f1(int x) que devuelve un -12
a = 99, f1(&a).
f1(int *x), *x = -12.
Notación de referencia
a = 99, f1(a)
f1(int &x), x = 12.
Dirección de punteros sin ser arreglos avanzan de 4 en 4.
Arreglos y punteros: Entre subíndices de un arreglo se avanzan de 4 bytes en 4 bytes a partir de la ubicación en memoria del primer elemento [0].
Int *vPtr = v; Int *vPtr = &v[0]. Ambas maneras apuntan al primer valor del arreglo v.
*( b + offset1 ), si b es un arreglo y offset1 un contador, nos desplazamos por el arreglo b en 1 posición de memoria (4 bytes), que es lo mismo que desplazarse como b[0] a b[1].
*size_t = variable sin signo (positiva) lo mismo que unsigned(int)
Memoria dinámica: pedir, usar y liberar memoria de distinto tamaño. delete [] borra memoria.
double *mptr;
mptr = new double[SIZE] 🡪 Declarar arreglo dinámico como puntero
delete[] mptr 🡪 Eliminar memoria
- (mptr + 1) primer elemento
- *mptr + 1 sumar 1 al valor de mptr
Archivos de texto: Cap.14
ptrDatos = nullptr;
stack = memoria que se da al programa de manera automática. Es solo del programa.
heap = memoria que manjea el sistema operativo y es genérica para todo el sistema.
Sentencias try catch
Sirven para le manejo de erroes, en los cuales podemos especificar mensajes o condiciones de error mediante el uso de throw. Puede haber un try y muchos catch pero no uno sin el otro.
POO: Polomorfismo, herencia, encapsulamiento y sobrecarga de operadores
Clases: Es la creación de un nuevo tipo de dato, que posee funciones internas que las llamamos métodos. Cuando creamos clases definimos áreas de memoria. Cunado se crean clases y creamos datos, los llamamos objetos de clases y se asigna memoria cuando creamos instancias o inicializamos datos de tipo de la clase. Programa cliente es el que usa las clases.
Class Circulo; 🡪 clase
Circulo c 🡪 instancia c de tipo Círculo u objeto de tipo círculo.
La clase es como planos, y los objetos son las casas construidas con ese plano.
Si la clase tiene un método llamado radio, el punto llama a la función con la instancia perteneciente a la clase, y se llama propiedad:
c.radio( ) 🡪 del objeto c, se llama a la función radio como propiedad definida en la clase Círculo.
Si declaro como Circulo circulo (1) ya ocupo memoria, si lo hago como Circulo circulo; no se entrega memoria. Para inicializar en el segundo caso:
Circulo circulo1;
circulo1 = Circulo(2);
Los métodos en la clase con el mismo nombre de la clase se llaman constructores y no tienen tipo de retorno. Los constructores entre otras cosas inicializan variables, y toman los valores de los parámetros que sean similares a los métodos en la clase. Los constructores piden áreas de memorias, inicializan datos y los validan.
Clase: definicion de un Nuevo tipo de dato
Objeto: instancia de una clase.
Encapsulamiento: Conjunto de datos y métodos en una clase (sintaxis)
Los constructores no tienen tipo de retorno porque ya llevan el nombre de la clase y por ende es de tipo de datos de la clase.
Archivo interfaz: Contiene la definición clases y sus definiciones de los métodos a manera de prototipo, se lo llama archivo de interfaz .h
Archivo de implementación: Posee el código functional de las clases es de formato .cpp
Archivo cliente: En donde el programa se ejecuta
Edición, pre procesamiento, compilación, encadenación, carga para ejecución
Se puede usar una clase en otra, o incluir un .h en otro, pero a momento de ejecución el compilador detectará una definición dos veces y habrá problemas de compilación
...