Está en la página 1de 9

Clases en C++

Universidad de Carabobo Facultad Experimental de Ciencias y Tecnologa Algoritmos y Programacin II Enero de 2005 1. Definicin de Clases
Cada clase contiene : datos ( datos miembro o campos), los cuales especifican las propiedades de los objetos. funciones (funciones miembro o mtodos), mediante los cuales se modela su comportamiento y las acciones que puede realizar. Un ejemplo de esto se puede apreciar en el siguiente fragmento de cdigo:
1 2 3 4 5 6

// Declaracin de una clase class MiClase { // Declaracin de datos miembro // Declaracin de mtodos };

En la declaracin de una clase, para cada dato miembro, debe especificarse mediante los modificadores de acceso el mbito desde el cual puede accederse a dicho miembro. stos son: private: Slo se permite su acceso desde los mtodos de la clase. public: Se permite su acceso desde cualquier punto que pueda usar la clase. Un dato pblico es accesible desde cualquier objeto de la clase. protected: Se permite su uso en los mtodos de la clase y en los de las clases derivadas mediante herencia. Un ejemplo de esto se puede apreciar en el siguiente fragmento de cdigo:
1 2 3 4 5

class Triangulo { private: float cat_opuesto; float cat_adyacente;

6 7 8 9

float hipotenusa; // Declaracin de mtodos };

2.

Constructores y Destructores
Caractersticas de los constructores: Cuando se crea un objeto de una clase siempre se llama automticamente a un constructor. Se emplea para iniciar los objetos de una clase. Es particularmente til para reservar, si es necesario, memoria para ciertos campos del objeto. Pueden haber varios constructores para una clase. Un constructor tiene el mismo nombre que la clase en la que est declarado y no devuelve nada. OJO: NO es una funcin void. Cuando no se define ningn constructor en una clase, el compilador crea un constructor por defecto, sin argumentos, que inicia los datos miembros a cero. Caractersticas de los destructores: Slo hay un destructor para una clase. Cuando un objeto deja de existir siempre se llama automticamente al destructor. Un destructor tiene el mismo nombre de la clase, precedido por el carcter ~. El destructor no admite parmetros ni devuelve ningn valor. OJO: NO es una funcin void. Si no se especifica, el compilador proporciona un destructor por defecto. Su implementacin tiene sentido slo cuando el constructor ha reservado memoria dinmicamente. Un ejemplo de esto se puede apreciar en el siguiente fragmento de cdigo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14

class MiClase { public: int *arreglo; // Constructor MiClase () { arreglo = new int[10]; } // Destructor

15 16 17 18 19

~MiClase () { delete [] arreglo; } };

3.

Mtodos
Caractersticas de la declaracin de los mtodos: Se declaran como cua lquier funcin en C++. Se especifican los prototipos de los mtodos en la declaracin de la clase. Su implementacin puede ser dentro de la declaracin de la clase o en un archivo .cpp Es usual disponer de mtodos pblicos que modifican y/o leen el valor de los datos privados. Pueden definirse funciones privadas que pueden ser de utilidad (funciones auxiliares) para las funciones pblicas.

Como estilo de programacin y organizacin, se recomienda tener un archivo para la declaracin de la clase y otro para la implementacin. Por ejemplo: triangulo.h (archivo que contiene la declaracin de la clase Triangulo)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

#ifndef triangulo_h #define triangulo_h class Triangulo { private: float cat_opuesto; float cat_adyacente; float hipotenusa; public: // Constructor de la clase Triangulo(); // Mtodos de inspeccin float VerOpu(); float VerAdy(); float VerHip(); void MostrarTriangulo(); // Mtodos de modificacin void ModOpu(float valor); void ModAdy(float valor); void ModHip(float valor); void ModificarTriangulo(float ady, float op,

26 27 28 29

float hip); }; #endif triangulo.cpp (archivo que contiene la implementacin de la clase Triangulo)

1 2 3 4 5 6 7

#include <iostream> #include triangulo.h using namespace std;

// Constructor de la clase Triangulo::Triangulo() 8 { 9 this->cat_opuesto = 0; 10 cat_adyacente = 0; 11 hipotenusa = 0; 12 }


13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

// Mtodos de inspeccin float Triangulo::VerOpu() { return cat_opuesto; } float Triangulo::VerAdy() { return cat_adyacente; } float Triangulo::VerHip() { return hipotenusa; } void Triangulo::MostrarTriangulo() { cout << "Cateto Opuesto: " << VerOpu() << endl; cout << "Cateto Adyacente: " << VerAdy() << endl; cout << "Hipotenusa: " << VerHip() << endl; } // Mtodos de modificacin void Triangulo::ModOpu(float valor) { cat_opuesto = valor; } void Triangulo::ModAdy(float valor)

44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

{ cat_adyacente = valor; } void Triangulo::ModHip(float valor) { hipotenusa = valor; } void Triangulo::ModificarTriangulo(float ady, float op, float hip) { ModOpu(op); ModAdy(ady); ModHip(hip); }

NOTA: El apuntador this es una variable predefinida en todas las funciones o mtodos miembro de una clase. Contiene la direccin del objeto concreto de la clase sobre la cual se est aplicando la funcin u operador miembro. Al ser apuntador, el acceso a los miembros del objeto se realizar con el operador flecha (->).

4.

Instanciacin
Un objeto se puede crear de dos formas: Esttica (el objeto existe mientras no se pierda alcance sobre l). Sinaxis: Nombre_de_clase variable_del_objeto;

Dinmica (el objeto se crea en memoria dinmica, y existe mientras no sea eliminado explcitamente de sta). Sintaxis: Nombre_de_clase *apuntador_al_objeto; apuntador_al_objeto = new Nombre_de_clase;

Un ejemplo de esto se puede apreciar en el siguiente fragmento de cdigo:


1 2 3 4 5 6 7 8 9

void main () { // Instanciacin esttica Triangulo a; // Instanciacin dinmica Triangulo *b; b = new Triangulo;

10 11 12 13

... delete b; }

5.

Paso de Mensajes

Es la forma de comunicacin entre dos o ms objetos (instancias), de clases similares o diferentes, por medio de operaciones. Un ejemplo de esto se puede apreciar en el siguiente fragmento de cdigo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

#include <iostream> class A { private: ... public: int Op1() { ... } }; class B { public: int x; int Op2(A obj) { return (x + obj.Op1()); } }; void main () { A obj1; B obj2; ... obj2.x = 100; // Paso de mensaje cout << obj2.Op2(obj1); } Observe el siguiente ejemplo que extiende a la clase Triangulo:

1 2 3 4 5

#include <iostream> #include triangulo.h Triangulo::Copiar(Triangulo t) {

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

cat_opuesto = t.VerOpu(); cat_adyacente = t.VerAdy(); hipotenusa = t.VerHip(); } void main () { Triangulo t1, t2; cout << Triangulo t1 << endl; t1.MostrarTriangulo(); t1.ModOpu(3.3); t1.ModAdy(5.0); t1.ModHip(7.0); cout << Triangulo t1 modificado << endl; t1.MostrarTriangulo(); t2.ModificarTriangulo(1.0, 1.0, 1.0); // Paso de mensaje t1.Copiar(t2); cout << Triangulo t1 copiado de t2 << endl; t1.MostrarTriangulo(); }

6.

Herencia

La herencia es una forma de reutilizacin del software, en la cual se crean clases nuevas a partir de clases existentes, mediante la absorcin de sus atributos y comportamientos, y enriqueciendo stos con las capacidades que las clases nuevas requieren. Las clases nuevas se denominan clases derivadas, en donde cada clase derivada se convierte en candidata a clase base para alguna clase futura. Existen tres tipos de herencia: pblica, privada y protegida. Sintaxis
class nombre_clase_derivada : <tipo_herencia> nombre_clase_base { ... };

Un ejemplo de esto se puede apreciar en el siguiente fragmento de cdigo:


1 2 3 4 5 6

class Isosceles : public Triangulo { private: int color; public:

7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

// Constructor de la clase Isosceles(float catetos, float hip) { cat_opuesto = catetos; cat_adyacente = catetos; hipotenusa = hip; } // Mtodos de inspeccin float VerCatetos() { return cat_opuesto; } int VerColor() { return color; } // Mtodos de modificacin void ModCatetos(float valor) { cat_opuesto = valor; cat_adyacente = valor; } void ModColor(int valor) { color = valor; } };

NOTA: Si la clase base posee un nico constructor que recibe unos parmetros, entonces el encabezado del constructor de la clase derivada debe invocar al constructor de la clase base con los parmetros requeridos. Un ejemplo de esto se puede apreciar en el siguiente fragmento de cdigo:
1 2 3 4 5 6 7 8 9 10 11 12 13

class A { private: ... public: A(int x, int y) { ... } ... }; class B : public A { private:

14 15 16 17 18 19 20 21 22

int z; public: B(int x, int y, int z) : A(x,y) { this->z = z; } ... };

También podría gustarte