You are on page 1of 12

Sexta Sesin

Metodologas y Tcnicas de Programacin II

Programacin Orientada a Objeto (POO) C++

Inicializacin y Limpieza I
1

6.0 Estado del Programa


Introduccin a la POO
Historia de la Programacin Conceptos de POO C++ Mi primera Clase

Repaso de Conceptos

Estndares de Programacin Punteros y Memoria

E! Control y Operadores

Clases y O"#etos en C++


$so y aplicacin Constructores

%unciones &migas Constantes e 'inline(

!o"recarga
)e Operadores )e %unciones

Herencia*

+ipos de ,isi"ilidad

Herencia M-ltiple

Polimor.ismo
%unciones ,irtuales Polimor.ismo y !o"recarga*

Plantillas

Contenedores

Iteradores

6.1 Repaso de Sesiones Anteriores


Relaciones de Amistad
!i & 01 2 y 2 01 C !i & 01 2 !i & 01 2 y " 442 3O &01C 3O 201& 3O &01" 5" es el 6i#o de 27

Podemos de.inir relaciones de amistas con una .uncin8 con un m9todo de otra clase o con una clase entera* %riend : 'Puedes acceder a mis atri"utos pri;ados como si .ueras uno de mis m9todos(

friend void g(X*, int); friend void Y::f(X*); friend class Z; friend void h();

// Global friend // Un mtodo de la clase Y // Toda Z es mi amiga

<

6.1 Repaso de Sesiones Anteriores


as relaciones de Amistad !on una .orma de saltarme el control de acceso 5)e .orma controlada7 Pueden resultar -tiles por razones de rendimiento por e#emplo 5%uncin apro"ar=asignatura57 a la >ue permito >ue acceda a nota directamente* alumno*nota : ?7

6.2 Inicializacin de Objetos


Constr!ctores y "estr!ctores C++8 al contrario >ue C8 permite incluir .unciones en el interior de las estructuras* 3ormalmente estas .unciones tienen la misin de manipular los datos incluidos en la estructura* En realidad nosotros utilizamos clases* )os .unciones muy particulares son las de inicializacin y limpieza8 o constructor8 y destructor* El constructor es una .uncin sin tipo de retorno y con el mismo nom"re >ue la estructura* Al!mno() El destructor tiene la misma .orma8 sal;o >ue el nom"re ;a precedido el operador ABA* #Al!mno()

6.2 Inicializacin de Objetos


Constr!ctores y "estr!ctores
class Punto { int x_; int y_; Punto(); Punto(int x, int y); }; Punto::Punto() { x_ = y_ = 0; } } Punto::Punto(int x, int y) { x_ = x; y_ = y; // Declaracin del constructor // Otro constructor.

6.2 Inicializacin de Objetos


Constr!ctores

!ir;en para inicializar un o"#eto de una determinada clase al mismo tiempo >ue se declara* +ienen el mismo nom"re >ue la clase* 3o retornan ning-n ;alor* 3o pueden ser 6eredados* En general de"en ser p-"licos EPor >u9F

6.2 Inicializacin de Objetos


Constr!ctores
class Pareja { public: // Constructor Pareja(int a, int b); // Funciones miembro o Metodos void Lee(int &a, int &b); void Guarda(int a, int b); private: // Datos miembro o Atributos int a_, b_; }; Pareja::pareja(int a, int b) { a_ = a2; b_ = b2; } Pareja par1(12, 32); int x, y; par1.Lee(x, y); cout <<"Valor par1.a:"<< x << endl; cout <<"Valor par1.b:"<< y << endl; Pareja par1; Pareja par1(); // Ilegal Por que? // Ilegal (funcin) } } void Pareja::Guarda(int a, int b) { a_ = a2; b_ = b2; void Pareja::Lee(int &a, int &b) { a_ = a; b_ = b;

6.2 Inicializacin de Objetos


Modo sim$li%icado de iniciali&acin !e "asa en >ue en C++ todo son o"#etos 5int tam"i9n lo es7* Cual>uier ;aria"le 5u o"#eto7 tiene un constructor por de.ecto Iniciali&adores* 3om"re de la ;aria"le miem"ro a inicializar8 seguida de la eHpresin >ue se usar para inicializarla entre par9ntesis* Los inicializadores se aIadirn a continuacin del par9ntesis cerrado >ue encierra a los parmetros del constructor8 antes del cuerpo del constructor y separado del par9ntesis por dos puntos AJA*
pareja::pareja(int a, int b) { a_ = a; b_ = b; } // Es ms seguro y eficiente as: pareja::pareja(int a,int b) : a_(a), b_(b) {}

6.2 Inicializacin de Objetos


'obrecarga de Constr!ctores
Podemos aIadir ;arios constructores a las clase* Es decirJ la .uncin del constructor puede so"recargarse*
class Pareja { public: // Constructor Pareja(int a, int b); Pareja() : a_(0), b_(0) {} // Funciones miembro o Metodos void Lee(int &a, int &b); void Guarda(int a, int b); private: // Datos miembro o Atributos int a_, b_; }; 1L Estamos simulando el constr!ctor $or de%ecto* Podemos declarar o"#etos de la clase Pare#a especi.icando los dos argumentos o ninguno de ellos8 en este -ltimo caso se inicializarn los datos miem"ros con ceros*

6.2 Inicializacin de Objetos


Constr!ctores y arg!mentos $or de%ecto
Podemos asignar ;alores por de.ecto a los argumentos del constructor8 de este modo reduciremos el n-mero de constructores necesarios*
class Pareja { public: // Constructores Pareja(int a, int b); Pareja() : a_(0), b_(0){}; // Metodos void Lee(int &a, int &b); void Guarda(int a, int b); private: // Atributos int a_, b_; }; // Metodos void Lee(int &a, int &b); void Guarda(int a, int b); private: // Datos miembro o Atributos int a_, b_; }; 11 class Pareja { public: // Constructor Pareja(int a=0,int b=0) :a_(0),b_(0){};

6.2 Fin I
Constr!ctores

Seguiremos con el Constructor Copia ...

1/

You might also like