Está en la página 1de 23

Tema 4.

Clases

Estructuas y ClasesForo Establecer las principales diferencias entre estructuras y clases. Constructores y DestructoresForo Establecer las principales diferencias entre constructores y destructores. Funciones set y getForo Establecer las principales diferencias entre las funciones tipo set y las tipo get. EstructurasArchivo ClasesArchivo Declaracin de clasesArchivo Especificadores de AccesoArchivo Funciones Set y GetArchivo Operador de resolucin de mbito o alcanceArchivo Constructor y DestructorArchivo Invocacin de Constructores y DestructoresArchivo Alcance de clase y acceso a miembros de claseArchivo Apuntador thisArchivo Variables EstticasArchivo Funciones Miembro EstticasArchivo Creando EstructurasTarea Creando ClasesTarea Arreglo de Clases

Estructuras Una estructuraes un tipo de dato compuesto que permite almacenar un conjunto de datos de diferente tipo . Los datos que contiene una estructura pueden ser de tipo simple (caracteres, nmeros enteros o de coma flotante etc.) o a su vez de tipo compuesto (vectores, estructuras, listas, etc.). A cada uno de los datos o elementos almacenados dentro de una estructura se les denomina miembros de esa estructura y stos pertenecern a un tipo de dato determinado. Una estructura define untipo de dato, no una variable, lo que significa que no existe reserva dememoria cuando el compilador est analizando la estructura. Posteriormentehabr que declarar variables del tipo definido por la estructura para poder almacenar y manipular datos. A la estructura cae en la denominacin de tipo de dato creado por el usuario, porque es el programa quien la construye a partir de los datos primitivos. struct Tiempo { int hora; int minuto;

int segundo; }; struct Fecha { int dia; int mes; int ao; }; int main() { struct Tiempo t; struct Tiempo t1 = {12, 0, 9}; t.hora = 12; t.minuto = 0; t.segundo =9; } Para tener acceso a los miembros de una estructura se utiliza el identificador que representa la estructura seguida de un punto y el nombre del miembro autilizar. Igual que cualquierotro tipo de dato se puede crear arreglos del tipo la estructura definida. int main() { struct Tiempo t[2];

struct Tiempo t1 = {12, 0, 9, 1, 1, 10}; t [0].hora = 12; t[0].minuto = 0; t[0].segundo =9; t [1].hora = 1; t[1].minuto = 1; t[1].segundo =10; }

Clases Una clase define un nuevo tipo de dato que especifica la forma de un objeto. Una clase incluye los datos y el cdigo que operarn sobre esos datos. Adems, una clase enlaza datos y cdigo. C++ usa una especificacin de una clase para construir objetos. Los objetos son instancias de una clase. Adems, serie una de clase planes es que esencialmente una

especifican cmo construir un objeto. Las clases permiten que el programador modele objetos que tienen atributos (representados como dato miembro) y comportamientos u operaciones (representados como funciones miembro). Los tipos contienen datos miembro y

funciones miembro y en C++ son por lo regular definidos mediante la palabra reservada class. Las funciones miembro en otros lenguajes de programacin orientados a objetos a vecesse llaman mtodos, y son invocados en repuesta a mensajes enviados a un objeto. Un mensaje corresponde miembro. Una vez que se ha definido una clase, el nombre de la clase pude ser utilizado para declarar objetos de dicha clase. La definicin de clase contiene prototipos de las funciones miembro y la definicin de los datos miembro a utilizar en la misma. Por lo general las funciones miembro se definen pblicas y los datos miembro privados, esto es, para evitar que el usuario de la clase asigne valores a los miembros inadecuados y obligue al misma poder modificarlos siempre a travs de la funcin miembro. Ejemplo: // class { private: Definicin de la clase. Triangulo a una llamada de funcin

float float public: Triangulo float };

base; altura; (); CalcularArea();

// Esta parte se denomina implementacin de la clase. Triangulo::Triangulo() { base=0; } void { return } base*altura/2; Triangulo:CalcularArea() altura =0;

Especificadores de Acceso C++ utiliza especificadores de acceso para permitir controlar a una clase el acceso a las variables de datos de esa clase. Losespecificadores de acceso permiten acceder a algunos miembros de la clase y restringir el acceso a otros.

Hay

tres

especificadores

de

acceso

en

C++: public,private y protected. Cuando usted declara pblico ( public) unmiembro de una clase, usted permite el acceso a tal miembro desde dentro yfuera de la clase. Los miembros de datos que son declarados protegidos (protected ) son nicamente accesibles por funciones miembro de la clase, perono se pueden acceder a ellos desde otras clases. Cuando un miembro de una clasees declarado privado ( private ) es inccesible no slo desde otras clases y otras partes del programa, sinotambin desde sus clases derivadas cuando se utiliza la herencia. //DEFINICION DE CLASE class Empleado { private: char* m_nombre; char* m_departamento; char* m_posicion; long m_salario; public: void ImprimirInfo(); void SetNombre( char* nombre ) {m_nombre = nombre } void SetDepartamento( char *departamento) { m_departamento = departamento } void SetPosicion ( char* posicion) { m_posicion = posicion }

void SetSalario ( long salario ){ m_salario = salario } const char* GetNombre { returnm_nombre } const char* GetDepartamento {return m_departamento } const char* GetPosicion {return m_posicion } const char* GetSalario { returnm_salario } }; Las GetNombre, yGetSalario en una sola lnea. Las variables de miembro son declaradas privadas para que funciones de miembro de otras funciones no tengan acceso a ellas sino a travs de la correspondiente funcin Get o Set. Las funciones miembro si son declaradas pblicas de tal modo que se pueda acceder a ellas desde otras funciones. Luego de colocar el prototipo de la funcin Imprimir Info en la definicin de clase, se produce a realizar la implementacin de la misma. funciones GetDepartamento, se SetNombre, setSalario, GetPosicion SetDepartamento,setPosicion,

denominan funciones

intercaladas, que son funciones que se declaran

void Empleado::ImprimirInfo()| { cout << "Nombre: "<< m_nombre << '\n'; cout << "Departamento:" << m_departamento << '\n'; cout << "Puesto: "<< m_posicion << '\n'; cout << "Salario: "<< m_salario << '\n'; } Los dos dos puntos ( :: ) se denomina operador de resolucin de mbitoo alcance. Indica que la funcin que se est definiendo, que en este casoes ImprimirInfo, pertenece a la clase Empleado. void main() { //creacin de un objeto de la claseEmpleado Empleado empleado12.SetNombre("Jose"); empleado12.SetDepartamento("Sistemas"); empleado12.SetPosicion("Programador"); empleado12.SetSalario(3000000); //impresion } de los datos empleado12.ImprimirInfo(); empleado12; //asignacion de valores a lasvariables miembro

Permitir el acceso a las variables solo a travs defunciones, que en la mayora de los casos se llaman SetXxx y GetXxx, se llama encapsulacinde datos. Las funciones que necesitan valores de otra clase, llaman a lasfunciones que les dan acceso y obtienen estos datos sin conocimiento dedetalles especficos de como se manipulan los datos. Las etiquetas public: y private: se utilizan paracontrolar el acceso a los datos miembro y a las funciones miembro de una clase.El modo de acceso para las clases es private: por defecto, de tal forma que todoslos miembros que aparezcan despus del encabezado de clase y antes de laprimera etiqueta son privados. Despus de cada una de las etiquetas, el modoque fue invocado por dicha etiqueta ser aplicado hasta la siguiente etiqueta,o hasta la llave derecha de terminacin de la definicin de clase. Puedenrepetirse las etiquetas public:, private: y protected:, pero este tipo de utilizacines raro y puede ser confuso. Se puede tener acceso a los miembros de claseprivado slo por miembros (y amigos) de dicha clase. Se puede tener acceso alos miembros pblicos de una clase mediante cualquier funcin del programa. Elfin

primordial panorama proporciona.

de los de los

miembros servicios

pblicos quela

es

presentar a los clientes de lasclases un clase

Funciones Set y Get

Las funciones tipo set se utilizan para asignar valores a datos miembro de clase y las funciones set se utilizan para retornar valores de miembros de clase. Por lo general se coloca set o get delante del identificador para saber de que tipo de funcin se trata, pero no es obligatorio colocarlos para que funcione.

Las funciones set por lo general son tipo void y aceptan parmetros y las funciones get por lo general son del tipo de dato que representa el dato miembro y no aceptan parmetros.

Ejemplo: int Fecha::getDia(); //retorna el dia de la fecha

void Fecha::setDia(int); //asigna un nuevo valor al dato miembro dia de la clase Fecha.

Operador de resolucin de mbito o alcance

El operador de mbito permite acceder de otra manerafunciones de miembro y variables de miembro de una clase. Cuando aparece eloperador de resolucin de mbito entre el nombre de la clase y el nombre de lafuncin en un programa es significa un que la funcin clase especificada especificada: Empleado::ImprimirInfo(); El operador de resolucin de mbito se sueleutilizar para llamar funciones que se encuentran fuera del mbito de la funcinde llamada. Entonces, para llamar la funcin ImprimirInfo() de la claseEmpleado se fuera de su mbito se debe utilizar este operador. La principal diferencia entre este operador y losoperadores punto y flecha es que el operador de resolucin de mbito se utilizapara acceder a miembros de clases, y el operador punto y flecha para acceder amiembros de objetos especficos. Ejemplo: ::MessageBox("Prueba resolucion"); del operador de miembro dela

Si el operador de resolucin de ambito aparece sinun nombre de clase delante, significa que la funcin que esta llamando (MessageBox ) no es miembro de ninguna clase.

Constructor Un constructor es una funcin miembro de clase, con el mismo nombre de la clase, puede aceptar o no parmetros, no retorna valor alguno, tampoco se debe especificar tipo de dato, aunque puede ser sobrecargado y se invoca automticamente cuando se crea el objeto de clase. Su funcin es inicializar los miembros de datos. Los datos miembro de una clase no pueden ser inicializados en la definicin de clase. Ms bien, los miembros de datos deben ser inicializados en un constructor de la clase o sus valores definidos ms adelante despus de que el objeto haya sido creado. Destructor Un destructor es una funcin miembro de laclase, que se llama igual que la clase, pero precedida del carcter ~. Undestructor de clase es llamado automticamente cuando un objeto

de una clase se sale de alcance. De hecho el destructor en realidad no destruye el objeto, ms bien ejecuta trabajos de terminacin, antes de que el sistema recupere el espacio de memoria del objeto con el fin de que pueda ser utilizado para almacenar nuevos objetos. Un destructor no recibe ningn parmetro ni regresa valor alguno. Una clase slo puede tener un destructor y no se puede sobrecargar.

Invocacin de Constructores y Destructores

Por

lo

regular,

los

constructores de

destructores

sonllamados

forma

automtica. El orden en el cual son hechas estas llamadas defuncin, depende del orden en el cual los objetos entran y salen de alcance. Engeneral, las llamadas de destructor se efectan en orden inverso a las llamadasde constructor. Sin embargo, la duracin de almacenamiento de los objetos puedemodificar el orden en el cual los destructores son llamados.

Se

llaman

los

constructores

para

objetosdeclarados con alcance global al principio de la ejecucin del programa.

Losdestructores

correspondientes

son

llamados a la terminacin del programa. Alcance de clase y acceso a miembros de clase Los nombres de variables y los nombres de funcindeclarados en una definicin de clase, y los nombres de datos y funcionesmiembro de una clase, pertenecen al alcance de dicha clase. Las funcionesmiembro no miembros se definen en alcance de archivo.

Dentro del alcance de clase, los miembros de clase son accesibles deinmediato por todas las funciones miembro de dicha clase y pueden serreferenciadas slo por su nombre. Fuera del alcance de una clase, los miembrosde clase se referencian, ya sea a travs del nombre del objeto, una referenciaa un objeto, o un apuntador a un objeto.

Las funciones miembro de una clase pueden ser sobrecargadas, pero slopor funciones dentro del alcance de dicha clase. Para realizar la sobrecarga deuna funcin miembro, slo se incluye en la definicin de clase un prototipopara cada versin de la funcin sobrecargada, y proporcionar una definicin defuncin por separado para cada una de las versiones de la funcin.

El

apuntador this es

un

puntero

los

miembros de la clase. Es utilizado de manera implcita para referencia tanto miembros de datos como las funciones miembro de un objeto. En dado clase que se quieran utilizar nombre de parmetros con el mismo nombre de los miembros de clase, el puntero this puede ayudar a establecer la diferencia entre un identificador y otro. Ejemplo: #include <iostream> using namespace std; class Triangulo{ private: float base; float altura; public: Triangulo(float, float); float Area(); }; Triangulo::Triangulo(float base, float altura) { this->base = base; //this indica que se trata del identificador base miembro de clase. this->altura = altura; } float Triangulo::rea() {

return base*altura/2; } int main(){ Triangulo t(2,2); cout << t.Area() << endl; }

Variable Estticas Para declarar una variable de miembro esttica lo nico que debemos de hacer es anteponer la palabra clave static a la definicin de tipo, es decir, si queremos declarar una variable de miembro esttica de tipo entero con el nombre _valor, haramos lo siguiente:

static int _valor; Con esta simple declaracin se ha creado una variable de miembro esttica. A partir de este momento, _valor slo ocupar una posicin de memoria. Independientemente del nmero de instancias que se creen de la clase que la define. Slo existir una posicin de memoria de tal forma que realizar un cambio en el valor de _valor se ver reflejado en todas las instancias de la clase que defina a _valor. En este sentido, se puede observar que una variable de tipo esttico tiene las mismas prestaciones que una variable de tipo global.

A la hora de acceder a una variable de miembro esttica, primero se debe tener en cuenta cmo se ha declarado la variable, es decir, si es pblica, protegida o privada. Una variable de miembro esttica pues, se puede acceder perfectamente desde dentro de las funciones de la clase que la definen. Tambin se puede acceder utilizando el operador "." o">" en caso de que la instancia que se haya creado sea un puntero. As, si la clase con el nombre CEjemplo contiene una definicin de la variable esttica _valor, podramos hacer (siempre y cuando, la variablem_staticValor fuera pblica), lo siguiente:

CEjemplo prueba; // Instancia a CEjemplo. // Accedemos a _valor porque es pblica prueba._valor= 20; Un caso aparte lo constituyen las funciones que no pertenecen a la clase que define la variable de miembro esttica. En estos caso, hemos de acceder al valor esttico utilizando el operador de resolucin de mbito "::". Es decir, si se quiere acceder a _valor desde la funcin main del programa, deberamos de hacer CEjemplo::_valor= 20. De nuevo, para que esto funcione, la variable esttica _valor ha de ser declarada como pblica.

En lneas generales, y sin despreciar estos ejemplos anteriormente mostrados, lo ideal es crearnos variables estticas de tipo privado y, mediante el uso de funciones estticas de tipo pblico, hacer las manipulaciones pertinentes a estas poderosas variables. Las funciones estticas, que veremos ms adelante, se caracterizan, entre otras cosas, por trabajar nicamente con variables estticas. Ejemplo #include<iostream.h> // Este ejemplo muestra cmo poder llevar la cuenta del nmero de instancias a una clase class CEjemplo2{ private: static unsigned int m_contInstancias; // Declaramos la variable esttica public: CEjemplo2() { m_contInstancias++; } ~CEjemplo2() { m_contInstancias--; } unsigned int NumInstancias() { return m_contInstancias; } }; // Se inicializa la variable esttica. unsigned int CEjemplo2::m_contInstancias = 0;

void main (void) {

CEjemplo2 objeto1, objeto2; CEjemplo2* objeto3 = new CEjemplo2; cout << "\existen " << objeto1.NumInstancias() <<" instancias a la clase CEjemplo2"; cout << "\n"; delete objeto3; cout << "\borramos una instancia y ahora existen " << objeto2.NumInstancias() ; cout << " instancias a la clase CEjemplo2 \n\n\n"; }

Funciones Miembro Estticas Las funciones de miembro estticas se caracterizan porque slo trabajan con funciones de miembro estticas. Al contrario que una funcin de miembro "convencional" (esto es, una funcin de miembro como las que hemos visto hasta ahora), una funcin de tipo esttica slo podr trabajar, como ya he dicho, con las variables anteriormente explicadas.

Para declarar una funcin de miembro esttica es necesario anteponer la palabra clave static antes de definir qu es lo que devuelve la funcin de miembro. As, si quisiramos declarar como funcin de miembro esttica la funcin de miembro

Num Instancias del ltimo ejemplo (cosa, por otra parte, totalmente recomendable), la definicin de la clase debera detener el aspecto siguiente:

class private: public: CEjemplo2() ~CEjemplo2() m_contInstancias; }; { {

CEjemplo2{

m_contInstancias++;} m_contInstancias--;} }

static unsigned int NumInstancias(){ return

Una funcin de miembro esttica no puede acceder a variables que no son estticas, es decir, si se tiene definida en la clase CEjemplo2 una variable del tipo:

int m_x; La funcin esttica NumInstancias NO podra acceder a la variable m_x. El puntero this es un parmetro que se pasa "ensecreto" a todas las funciones que pertenecen a una clase. Con el punterothis podemos acceder a todos y cada uno de los miembros de esa clase. Pues bien, en las funciones de miembro estticas no se pasa el puntero this as que se podr utilizar para acceder a otros miembros desde la funcin del ejemplo NumIns.

TAREA 1 Crear las siguientes estructuras:


Persona Vehculo Tiempo Fecha Utilice para la creacin de sus datos miembros el archivo de encabezado string.h para los casos que aplique. 2 Disponible desde: Crear las siguientes clases: Persona Vehculo Tiempo Fecha Utilice para la creacin de sus datos miembros el archivo de encabezado string.h para los casos que aplique. Haga las funciones set y get de cada uno de sus miembros. 3

E LABORAR UN ARREGLO D E LA CLASE P ERSONA


DE

10 ELEMENTOS . L OS DATOS DEBEN PEDIRSE P ERSONA .

POR EL TECLADO Y LUEGO ALMACENARSE EN EL ARREGLO DE

También podría gustarte