Escolar Documentos
Profissional Documentos
Cultura Documentos
Tipos enumerados
Tipos enumerados para colecciones de datos. Una vez que se declara un tipo como enum en C++ no es necesario volver a usar la palabra clave
Declaracin de variables de tipo estructura definida por el usuario. En C++ no es necesario colocar la palabra clave struct
// escribe 2
.
//escribe 10 //escribe 2
const
En C++ el especificador const se puede utilizar con variables y con punteros. Si una variable se define como const se tiene la garanta de que su valor no va a cambiar durante toda la ejecucin del programa. Si en alguna sentencia del programa se intenta variar el valor de una variable definida como const, el compilador produce un mensaje de error. Esta precaucin permite detectar errores durante la compilacin del programa, lo cual siempre es ms sencillo que detectarlos en tiempo de ejecucin. Las variables const de C++ pueden ser utilizadas para definir el tamao de un vector en la declaracin de ste, cosa que no est permitida en C.
2. un puntero constante apuntando a una variable cualquiera. El puntero siempre apuntar a la misma variable, pero sta puede cambiar su valor.
En ANSI C una variable declarada como const puede ser modificada a travs de un puntero a dicha variable.
2. Otra forma de utilizar funciones inline sin necesidad de utilizar esta palabra es introducir el cdigo de la funcin en la declaracin (convirtindose de esta manera en definicin), ponindolo entre llaves { } a continuacin de sta. Este segundo procedimiento suele utilizarse por medio de ficheros header (*.h).
Sobrecarga de funciones.
La sobrecarga (overload) de funciones consiste en declarar y definir varias funciones distintas que tienen un mismo nombre. Dichas funciones se definen de forma diferente. En el momento de la ejecucin se llama a una u otra funcin dependiendo del nmero y/o tipo de los argumentos actuales de la llamada a la funcin. El valor de retorno no influye en la decisin del compilador (enlace esttico), respecto a qu funcin deber llamar.
Definicin de la clase CUENTA. Cuenta titular: String; saldo: float; retiro(valor:float); depsito (valor:float);
Tiempo de ejecucin Atributos Mtodos
// cuenta.cpp, Definicin de las funciones de la clase #include cuenta.h // inicializa la variable de clase int Cuenta :: ultimoCodigo = 0; void Cuenta :: retiro (int suma) { if puedoSacar(suma) saldo=saldo-suma; } void Cuenta :: deposito (int suma) { saldo=saldo+suma; } int Cuenta :: verSaldo () { return saldo; } int Cuenta :: verUltOper(int n) { ... } static int Cuenta :: nuevoCodigo() { return (ultimoCodigo++); }
Interfaz de la clase.
Una clase ofrece un conjunto de funciones pblicas a travs de las cuales se puede actuar sobre los datos, que sern privados. Estas funciones o mtodos pblicos constituyen la interfaz de la clase.
Clase amiga
friend <identificador>; Si <identificador> es una funcin, desde esta puede accederse a los miembros privados y protegidos de la clase anfitriona. Ejemplo: class C { friend void foo(C&); int x; // privada por defecto ... }; void foo(C& c) { cout << c.x << endl; } // Ok. Si <identificador> es una clase, los miembros privados y protegidos de la clase anfitriona pueden ser accedidos desde todas las funciones miembro de la invitada. Ejemplo: class C { friend class D; int x; // privada por defecto }; class D { int y; public: void getx(C c) { cout << c.x << endl; } // Ok. D(C& c) { y = c.x; } // Ok. };
En cada instancia de la clase (objeto) existe una copia de los miembros no-estticos; por contra, hay una sola de los estticos para todas las instancias (objetos). La singularidad de estas copias conduce a algunas particularidades no permitidas al resto de los miembros. Por ejemplo, pueden ser accedidas sin referencia a ninguna instancia concreta de la clase y deben ser definidas como si fuesen variables estticas normales; adems se permiten algunas singularidades en la notacin de acceso a estos miembros.
Constructor de objetos.
Un constructor es una funcin especial que sirve para construir o inicializar objetos. En C++ la inicializacin de objetos no se puede realizar en el momento en que son declarados; sin embargo, tiene una caracterstica muy importante y es disponer de una funcin llamada constructor que permite inicializar objetos en el momento en que se crean. Un constructor es una funcin que sirve para construir un nuevo objeto y asignar valores a sus miembros dato.
Un constructor del objeto se llama cuando se crea el objeto implcitamente: nunca se llama explcitamente a las funciones constructoras.
Creacin de objetos
Siempre que creamos objetos, invocamos al constructor. Los objetos se crean : i) cuando se declara una variable del tipo clase_del_objeto_instanciado Cuenta micuenta;
ii) con objetos creados dinmicamente con new Cuenta *micuenta; micuenta=new Cuenta() //otra opcin micuenta=new Cuenta(*persona)
Destructores
Un destructor es una funcin miembro con igual nombre que la clase, pero precedido por el carcter ~. Una clase slo tiene una funcin destructor que, no tiene argumentos y no devuelve ningn tipo. Un destructor realiza la operacin opuesta de un constructor, limpiando el almacenamiento asignado a los objetos cuando se crean. C++ permite slo un destructor por clase. El compilador llama automticamente a un destructor del objeto cuando el objeto sale fuera del mbito. Si un destructor no se define en una clase, se crear por defecto un destructor que no hace nada. Normalmente los destructores se declaran public.
Destruccin de objetos.
Los destructores se ejecutan automticamente cada vez que se libera memoria:
Al acabar un procedimiento (variables automticas) Al aplicar el operador delete () (variables dinmicas)
class Complejo { public: ~Complejo () {...}; Complejo(float pr = 0.0; float pi = 0.0); }; delete c1; No tiene argumentos y tampoco regresa un valor
Herencia
Mecanismo que permite definir una clase modificando una o ms clases ya existentes. Estas modificaciones consisten habitualmente en aadir nuevos miembros (variables o funciones), a la clase que se est definiendo, aunque tambin se puede redefinir variables o funciones miembro ya existentes. La clase de la que se parte en este proceso recibe el nombre de clase base, y la nueva clase que se obtiene se denomina clase derivada. sta a su vez puede ser clase base en un nuevo proceso de derivacin, iniciando de esta manera una jerarqua de clases. De ordinario las clases base suelen ser ms generales que las clases derivadas. Esto es as porque a las clases derivadas se les suelen ir aadiendo caractersticas, en definitiva variables y funciones que diferencian concretan y particularizan.
En algunos casos una clase no tiene otra utilidad que la de ser clase base para otras clases que se deriven de ella. A este tipo de clases base, de las que no se declara ningn objeto, se les denomina clases base abstractas (ABC, Abstract Base Class) y su funcin es la de agrupar miembros comunes de otras clases que se derivarn de ellas. La mayor ventaja del uso del mecanismo de la herencia es la posibilidad de reutilizar cdigo sin tener que escribirlo de nuevo. Esto es posible porque todas las clases derivadas pueden utilizar el cdigo de la clase base sin tener que volver a definirlo en cada una de ellas.
Tipos de herencia.
El proceso de herencia puede efectuarse de dos formas distintas: siendo la clase base public o private para la clase derivada.
En el caso de que la clase base sea public para la clase derivada, sta hereda los miembros public y protected de la clase base como miembros public y protected, respectivamente. Por el contrario, si la clase base es private para la clase derivada, sta hereda todos los datos de la clase base como private.
Para indicar que una clase deriva de otra es necesario indicarlo en la definicin de la clase derivada, especificando el modo -public o private- en que deriva de su clase base:
class <Clase_Derivada> : public o private <Clase_Base>
Un objeto de la clase derivada contiene todos los miembros de la clase base y todos esos miembros deben ser inicializados. Por esta razn el constructor de la clase derivada debe llamar al constructor de la clase base. Al definir el constructor de la clase derivada se debe especificar un inicializador base. Este inicilizador base se especifica poniendo, a continuacin de los argumentos del constructor de la clase derivada, el carcter dos puntos (:) y el nombre del constructor de la clase o las clases base, seguido de una lista de argumentos entre parntesis. El inicializador base puede ser omitido en el caso de que la clase base tenga un constructor por defecto. En el caso de que el constructor de la clase base exista, al declarar un objeto de la clase derivada se ejecuta primero el constructor de la clase base.
Polimorfismo
Capacidad de llamar a funciones distintas con un mismo nombre. Estas funciones pueden actuar sobre objetos distintos dentro de una jerarqua de clases, sin tener que especificar el tipo exacto de los objetos.
En todos los niveles de esta jerarqua est contenida una funcin llamada Funcion_1(). Esta funcin no tiene por qu ser igual en todas las clases, aunque es habitual que sea una funcin que efecte una operacin muy parecida sobre distintos tipos de objetos.
polimorfismo
Es importante comprender que el compilador no decide en tiempo de compilacin cul ser la funcin que se debe utilizar en un momento dado del programa. Esa decisin se toma en tiempo de ejecucin. A este proceso de decisin en tiempo de ejecucin se le denomina vinculacin dinmica o tarda, en oposicin a la habitual vinculacin esttica o temprana, consistente en decidir en tiempo de compilacin qu funcin se aplica en cada caso. A este tipo de funciones, incluidas en varios niveles de una jerarqua de clases con el mismo nombre pero con distinta definicin, se les denomina funciones virtuales. El polimorfismo hace posible que un usuario pueda aadir nuevas clases a una jerarqua sin modificar o recompilar el cdigo original. Esto quiere decir que si desea aadir una nueva clase derivada es suficiente con establecer la clase de la que deriva, definir sus nuevas variables y funciones miembro, y compilar esta parte del cdigo, ensamblndolo despus con lo que ya estaba compilado previamente.
Ejemplo
Como ejemplo, se puede pensar en dos tipos de cuentas bancarias que comparten algunas caractersticas y que tambin tienen algunas diferencias. Ambas cuentas tienen un saldo, un inters y el nombre del titular de la cuenta. La cuenta joven es un tipo de cuenta que requiere la edad del propietario, mientras que la cuenta empresarial necesita el nombre de la empresa. El problema podra resolverse estableciendo una clase base llamada C_Cuenta y creando dos tipos de cuenta derivados de dicha clase base.