Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ronperez@ucab.edu.ve
ronaldrr@cantv.net
ronaldperezr@hotmail.com
Programación II
Creación de Objetos
Programación II
Operador new
Programación II
Operador new
En las expresiones con new se puede usar
cualquiera de los constructores disponibles para
una clase.
Programación II
Operador delete
Delete primero llama al destructor y después libera la
memoria. El argumento para el delete debe ser una
dirección: Puntero a objeto creado con new.
Programación II
Gestión de Memoria
El compilador conoce con exactitud el tipo, la
cantidad y el ámbito de los objetos automáticos que
se crean en la pila.
Programación II
Delete void*: Mal asunto
Programación II
Creación Dinámica de Objetos
Operadores new y delete con arrays.
En C++ se pueden crear vectores de objetos ya
sea en la pila o en el head, con la certeza de que
se producirá la llamada al constructor para cada
uno de los objetos del vector.
Hay una restricción: debe existir un constructor
por defecto, o sea, sin argumentos, que es el
que será llamado para cada objeto.
Programación II
Creación Dinámica de Objetos
Operadores new y delete con arrays.
Programación II
Clase String
El ANSI proporsiona una clase string que evita
muchos problemas asociados a vectores de
caracteres simples (char * o char[]). Se puede
definir un objeto de la clase string de una forma
muy simple, tal y como se muestra en este
ejemplo:
Programación II
Clase String
Funciones miembros: la clase string tiene
muchas funciones miembros. Algunas funciones
básicas se describen a continuación:
Inicialización Un objeto string se puede definir sin un valor de inicialización,
(constructor) en ese caso su valor inicial es una cadena vacía (longitud cero,
ningún carácter):
string str1;
Un objeto de la clase string se puede también
inicializar con
• una expresión string:
string str2 = str1;
string str3 = str1 + str2;
string str4 (str2); // forma alternativa a string str4 =
str2;
Programación II
Clase String
• una cadena de caracteres constante:
string str4 = "hola allí";
string str5 ("adiós"); // forma alternativa a string str5
= "adiós";
• un único carácter
Desafortunadamente, los métodos previstos no
funcionan:
string str6 = ' A'; // incorrecto
Inicialización string str7 ('A'); // también incorrecto
(constructor) • En su lugar, debemos utilizar una forma especial con
dos valores:
string str7 (1, 'A'); // correcto
Los dos valores son: la longitud deseada de la cadena
y un carácter para llenar la cadena. En este caso,
estamos pidiendo una cadena de longitud uno,
rellenada con el carácter A.
• una subcadena de otro objeto string:
string str8 = "ABCDEFGHIJKL", str9(str8, 2, 9);
Programación II
Clase String
size_type length() const;
size_type size() const;
Ambas funciones devuelven la longitud (número de
caracteres) del string. El tipo devuelto size_type es un
tipo entero sin signo. (el nombre
length del tipo generalmente debe tener el nombre de la
clase con el operador de alcance,
size como en string::size_type .)
Programación II
Clase String
const char * c_str();
Se utiliza para poder compatibilizar el nuevo tipo de dato con el
antiguo char *
c_str string filename; cout << "introduce nombre del archivo: "; cin >>
filename; ofstream
outfile (filename.c_str()); outfile << "datos" << endl;
string::pos insert(string::size_type pos, const string& s);
Programación II
Clase String
string::pos erase(string::size_type pos, size_type n);
Programación II
Clase String
size_type (const string &str, size_type posicion);
Programación II
Clase String
string substr(size_type pos, size_type n);
Programación II
Clase String
Funciones No miembros:
Lee caracteres de un flujo de entradas en una string, parando
cuando sucede una de las cosas siguientes:
getline • Una condición end of file ocurre en el flujo de entradas
• Cuando el número máximo de los caracteres que pueden
caber en una string se ha leído.
• Cuando un carácter leído dentro de la cadena es igual al
delimitador especificado (el newline es el delimitador por
defecto); el carácter delimitador se quita del flujo de
entradas, pero no se añade a la cadena.
El valor de vuelta es una referencia al flujo de entradas. Si la
corriente se prueba como valor lógico (como en si o mientras
que), es equivalente verdad si se ha leído correctamente y
falso en otro caso (e.g., fin del archivo).
Programación II
Clase String
Funciones No miembros:
El operador de asignación se puede utilizar de
varias maneras:
• Asignando una cadena a otra
string cadena1= "hola";
= string cadena2; cadena2 = cadena1
• Asignando una cadena constante
string cadena3; cadena3 = "adiós";
• Asignando un carácter
string cadena4;
char ch = 'A';
cadena4 = ch;
cadena4 = 'Z';
Programación II
Clase String
Funciones No miembros:
+ es el operador de concatenación:
• dos objetos string
string str1 = "hola";
string str2 = "allí";
+ string str3 = str1 + str2; //"hola allí“
Programación II
Clase String
Funciones No miembros:
"+ =" el operador combina las operaciones anteriores de
asignación y de concatenación
+= secuencia str1 = "hola";
str1 + = "allí";
== Los operadores de comparación devuelven un valor
!= boleano (true/false) que indica si la relación especificada
<> se verifica entre los dos operandos. Los operandos pueden
<= ser:
>=
• dos objetos string
• un objeto string y una secuencia de caracteres
constante.
Programación II
Clase String
Funciones No miembros:
El operador de inserción envía el valor de un objeto string a un
flujo de salida (e.g., cout ).
<< secuencia str1 = "hola allí";
cout << str1 << endl;
>> El operador de extracción lee una cadena de caracteres de un
flujo de entrada y asigna el valor a un objeto string.
secuencia str1;
cin >> str1;
[] El operador del subíndice tiene acceso a un carácter en una
secuencia. Muy importante: No se pude utilizar para añadir
caracteres al string, sólo para consultar el valor de un carácter
o para modificarlo:
string str10 = "abcdefghi";
char ch = str10[3 ];
cout << ch << endl; // ' d '
str10[5] = ' X';
cout << str10 << endl; "abcdeXghi"
Programación II
Listas Enlazadas
Programación II
Listas Enlazadas
Una lista enlazada consta de:
•Una colección de nodos situados en la
memoria dinámica conectados entre sí.
•Operaciones de inserción, eliminación y
consulta arbitrarias de elementos.
Cada nodo se compone de:
•Un dato.
•Una referencia al siguiente nodo.
class Nodo
{
object dato;
Nodo *Siguiente;
};
Programación II
Clasificación de las Listas Enlazadas
Las listas de se pueden dividir en cuatro
categorías:
oListas simplemente enlazadas: cada nodo (elemento)
contiene un único enlace que conecta ése al nodo
siguiente o sucesor. La lista es eficiente en recorridos
directos.
oLista doblemente enlazadas: cada nodo contiene dos
enlaces, uno a su predecesor y otro al su sucesor. La
lista es eficiente tanto en recorrido directo (<<adelante
>>) como en recorrido inverso (<<atrás>>).
oListas circulares simplemente enlazadas: una lista
simplemente enlazada en la que el último elemento (cola)
se enlaza al primer elemento (cabeza) de tal modo que la
lista puede ser recorrido de modo circular (<<en anillo>>)
Programación II
Clasificación de las Listas Enlazadas
Las listas de se pueden dividir en cuatro
categorías:
oListas circulares doblemente enlazadas: una lista
doblemente enlazada en la que el último elemento (cola)
se enlaza al primer elemento y viceversa. Esta lista se
puede recorrer en modo circular (en anillo) tanto en
dirección directa (<<adelante>>) como inversa
(<<atrás>>)
Programación II