Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Curso de java básico (scjp)
Definición de Clases y Variables de referencia.
Lenguaje de programación Java
Ejemplo de Programa C++
Informática II Clase 12: Flujos Diego Fernando Serna Restrepo
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Clase 3: Punteros y Referencias
Inner classes CAPITULO 8.
POO en C++: Sintaxis En el .h debe aparecer la declaración de la clase: class NombreClase { private: // atributos y métodos privados public: // atributos.
FUNCIONES EN C.
Informática II Prof. Dr. Gustavo Patiño MJ
Informática II Prof. Dr. Gustavo Patiño MJ
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Algoritmos y Estructuras de Datos
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Programación Orientada a Objetos en Java
Unidad 3 Punteros.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Chapter 7 Functions Dale/Weems/Headington. 2 Tópicos Capítulo 7 l Writing a Program Using Functional Decomposition l Writing a Void Function for a Task.
Lic. Rosemary Torrico Bascopé
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
POO en C++ Programación Orientada a Objetos. Declaración de clases con struct Las clases en C++ pueden definirse utilizando la construcción struct Ejemplo:
SCJP Sun Certified Programmer for Java 6
Semana 5 Subprogramas..
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando.
Desarrollador Profesional de Juegos Programación III Unidad II Una clase thread para window.
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
1 Polimorfismo y Métodos Virtuales Agustín J. González ELO329.
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
Manejo de Punteros y objetos en memoria dinámica en C++
Dinamismo y Contenedores Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires (C++ Avanzado) Depto. de Computación Algoritmos y Estructuras.
Elementos básicos del lenguaje
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Elementos básicos del lenguaje
PUNTEROS Y REFERENCIAS
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González ELO329.
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
1 Definición y Conversión de datos Agustín J. González ELO-329.
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González Versión Original de Kip Irvine ELO326: Seminario II 2do. Sem
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González Versión Original de Kip Irvine ELO329.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
Programación Orientada a Objetos
Sesión 09: Sobrecarga (1) /1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Sesión 10: Sobrecarga (2) /1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
Polimorfismo y Métodos Virtuales Agustín J. González ELO329.
INTRODUCCION A LA PROGRAMACION
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend)‏ Agustín J. González ELO329.
Desarrollador Profesional de Juegos Programación III Unidad I El manejador universal.
1 Definición y Conversión de datos Agustín J. González ELO-329.
Curso de C # República Bolivariana de Venezuela Área de Computación Facilitador: Prof. Bassam Asfur.
Algunas Características de C++ no presentes en C Agustín J. González ELO-329.
LICETH CAJAS 3RO ASI 26/10/2010. Es un lenguaje de programación diseñado para crear una amplia gama de aplicaciones que se ejecutan en.NET Framework,
Prof. Manuel B. Sánchez. Declaración de Objetos Una vez que la clase ha sido implementada se pueden declarar objetos como variables locales de métodos.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Transcripción de la presentación:

Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2

C HISTE DEL D ÍA Informática II 2011/2 2

C ONTENIDO Informática II 2011/2 3 Variables miembro estáticas 1 Funciones miembro estáticas 2 Punteros a funciones 3 4 Arreglo de punteros a funciones

C LASES Y FUNCIONES ESPECIALES Informática II 2011/2 4 Hasta ahora se ha estudiado diferentes mecanismos que tiene C++ para manipular variables: variables globales, variables locales de las funciones, punteros a variables y variables miembro. En C++ existen métodos para que diferentes objetos del mismo tipo puedan compartir variables y funciones.

D ATOS MIEMBRO ESTÁTICOS 1 Las variables miembro declaradas como static son compartidas a lo largo de las instancias de la clase. 2 Se dice que una variable miembro static pertenece como tal a la clase en vez de al objeto, es por ello que se puede tener acceso a ella como si se tratase de una variable global 3 A pesar de que la variable es estática y privada, cualquier método de la clase puede tener acceso a ella o a cualquier otra variable miembro. Informática II 2011/2 5

D ATOS MIEMBRO ESTÁTICOS 4 Incluso no se hace necesario instanciar un objeto de la clase para tener acceso directo a esta, si es definida como publica. 5 Las variables miembro normales son creadas por cada objeto instanciado, pero solo existe una variable estática por clase. Informática II 2011/2 6 Buena practica de programación Es preferible definir la variable estática como privada y otorgarle un método de acceso público, sin embargo de esta manera se debe crear primero un objeto para a través de él poder acceder al método. Buena practica de programación Es preferible definir la variable estática como privada y otorgarle un método de acceso público, sin embargo de esta manera se debe crear primero un objeto para a través de él poder acceder al método.

Informática II 2011/2 7 D ATOS MIEMBRO ESTÁTICOS #include using namespace std; class Cat { public: Cat(int age):itsAge(age){HowManyCats++; } virtual ~Cat() { HowManyCats--; } virtual int GetAge() { return itsAge; } virtual void SetAge(int age) { itsAge = age; } static int HowManyCats; private: int itsAge; }; int Cat::HowManyCats = 0; int main() { const int MaxCats = 5; int i; Cat *CatHouse[MaxCats]; for (i = 0; i<MaxCats; i++) CatHouse[i] = new Cat(i); for (i = 0; i<MaxCats; i++) { cout << "There are "; cout << Cat::HowManyCats; cout << " cats left!\n"; cout << "Deleting the one which is "; cout GetAge(); cout << " years old\n"; delete CatHouse[i]; CatHouse[i] = 0; } return 0; } "There are “ 5 cats left Deleting the one which is 0 years old "There are “ 4 cats left Deleting the one which is 1 years old "There are “ 3 cats left Deleting the one which is 2 years old "There are “ 2 cats left Deleting the one which is 3 years old "There are “ 1 cats left Deleting the one which is 4 years old

T IPS AL USAR DATOS MIEMBROS ESTÁTICOS * Use variables miembro estáticas para compartir datos entre todas las instancias de una clase. * Declare variables miembro estáticas protected o private, si desea restringir el acceso a estas. * No utilice variables miembro estáticas para almacenar datos de un objeto. Informática II 2011/2 8

C ONTENIDO Informática II 2011/2 9 Variables miembro estáticas 1 Funciones miembro estáticas 2 Punteros a funciones 3 4 Arreglo de punteros a funciones

F UNCIONES MIEMBRO ESTÁTICAS También se puede acceder a estos métodos estáticos a través de un objeto creado, similar a como es llamado un método miembro cualquiera. Las funciones miembro estáticas son como las variables miembro estáticas, existen no para cada objeto, sino por clase, por ello pueden ser llamadas sin que se haya instanciado un objeto de la clase. Informática II 2011/2 10

Informática II 2011/2 11 F UNCIONES MIEMBRO ESTÁTICAS class Cat{ public: //…Constructor, destructor, otros metodos static int GetHowMany() { return HowManyCats; } static int HowManyCats; }; int Cat::HowManyCats = 0; int main() { int howMany; Cat theCat; // define a cat howMany = theCat.GetHowMany(); // access through an object howMany = Cat::GetHowMany(); // access without an object }

Cuidado, las funciones miembro estáticas NO poseen un puntero this, ni tampoco pueden ser declaradas const. Como las funciones miembro utilizan el puntero this para acceder a las variables miembro, una función estática solo podrá acceder a los datos miembro que sean declarados estáticos. Informática II 2011/2 12 F UNCIONES MIEMBRO ESTÁTICAS

C ONTENIDO Informática II 2011/2 13 Variables miembro estáticas 1 Funciones miembro estáticas 2 Punteros a funciones 3 4 Arreglo de punteros a funciones

P UNTEROS A FUNCIONES Así como el nombre de un arreglo es un puntero constante al primer elemento del arreglo, el nombre de una función es un puntero constante a la función. Es posible declarar entonces una variable puntero que apunte a un función e invocar o llamar a la función original a través de él. Informática II 2011/2 14 Esto puede ser muy útil, al permitir crear programas que decidan qué función llamar basándose en la elección del usuario en tiempo de ejecución.

Un puntero a función debe apuntar siempre a una función con el mismo tipo de retorno y firma. Informática II 2011/2 15 P UNTEROS A FUNCIONES long (* funcPtr) (int); funcPtr : es declarado para ser un puntero que apunta a una función que toma un entero int como parámetro de entrada y retorna un long. El paréntesis al rededor de * funcPtr es necesario funcPtr : es declarado para ser un puntero que apunta a una función que toma un entero int como parámetro de entrada y retorna un long. El paréntesis al rededor de * funcPtr es necesario

Para asignar un puntero a una función, simplemente se iguala este al nombre de la función. Informática II 2011/2 16 P UNTEROS A FUNCIONES void (* pFunc) (int &, int &);//puntero a funcion void GetVals(int&, int&);//funcion pFunc = GetVals;//puntero a funcion getVals Para hacer el llamado a la función a través del puntero, simplemente use el puntero a función de la misma forma como usaría el nombre de la función pFunc(valOne, valTwo);//llamdo de la funcion

#include using namespace std; void Square (int&,int&); void Cube (int&, int&); void Swap (int&, int &); void GetVals(int&, int&); void PrintVals(int, int); Informática II 2011/2 17 P UNTEROS A FUNCIONES int main() { void (* pFunc) (int &, int &); bool fQuit = false; int valOne=1, valTwo=2; int choice; while (fQuit == false) { cout << "(0)Quit (1)Change Values (2)Square (3)Cube (4)Swap: "; cin >> choice; switch (choice) { case 1: pFunc = GetVals; break; case 2: pFunc = Square; break; case 3: pFunc = Cube; break; case 4: pFunc = Swap; break; default : fQuit = true; break; } if (fQuit) break; PrintVals(valOne, valTwo); pFunc(valOne, valTwo); PrintVals(valOne, valTwo); } return 0; } void PrintVals(int x, int y) { cout << "x: " << x << " y: " << y << endl; } void Square (int & rX, int & rY) { rX *= rX; rY *= rY; } void Cube (int & rX, int & rY) { int tmp; tmp = rX; rX *= rX; rX = rX * tmp; tmp = rY; rY *= rY; rY = rY * tmp; } void Swap(int & rX, int & rY) { int temp; temp = rX; rX = rY; rY = temp; } void GetVals (int & rValOne, int & rValTwo){ cout << "New value for ValOne: "; cin >> rValOne; cout << "New value for ValTwo: "; cin >> rValTwo; }

P UNTEROS A FUNCIONES Los punteros a funciones reducen código duplicado, clarifican el programa, y permite hacer tablas de funciones a llamar en tiempo de ejecución. Informática II 2011/2 18 // Listing 14.6 Without function pointers #include int main() { bool fQuit = false; int valOne=1, valTwo=2; int choice; while (fQuit == false) { cout << "(0)Quit (1)Change Values (2)Square(3)Cube (4)Swap: "; cin >> choice; switch (choice) { case 1: PrintVals(valOne, valTwo); GetVals(valOne, valTwo); PrintVals(valOne, valTwo); break; case 2: PrintVals(valOne, valTwo); Square(valOne,valTwo); PrintVals(valOne, valTwo); break; case 3: PrintVals(valOne, valTwo); Cube(valOne, valTwo); PrintVals(valOne, valTwo); break; case 4: PrintVals(valOne, valTwo); Swap(valOne, valTwo); PrintVals(valOne, valTwo); break; default : fQuit = true; break; } if (fQuit) break; } return 0; }

P ASANDO COMO ARGUMENTO A UNA FUNCIÓN, PUNTEROS A FUNCIONES Los punteros a funciones pueden ser pasados como argumentos a otras funciones, las cuales a su vez pueden llamar a otra función usando el puntero. Informática II 2011/2 19 #include using namespace std; void Square (int&,int&); void Cube (int&, int&); void Swap (int&, int &); void GetVals(int&, int&); void PrintVals(void (*)(int&, int&),int&, int&); int main() { int valOne=1, valTwo=2; int choice; bool fQuit = false; void (*pFunc)(int&, int&); while (fQuit == false) { cout << "(0)Quit (1)Change Values (2)Square (3)Cube (4)Swap: "; cin >> choice; switch (choice) { case 1:pFunc = GetVals; break; case 2:pFunc = Square; break; case 3:pFunc = Cube; break; case 4:pFunc = Swap; break; default:fQuit = true; break; } if (fQuit == true) break; PrintVals ( pFunc, valOne, valTwo); } return 0; } void PrintVals( void (*pFunc)(int&, int&),int& x, int& y) { cout << "x: " << x << " y: " << y << endl; pFunc(x,y); cout << "x: " << x << " y: " << y << endl; }

Se puede usar typedef para simplificar las definiciones de punteros a funciones Informática II 2011/2 20 P ASANDO COMO ARGUMENTO A UNA FUNCIÓN, PUNTEROS A FUNCIONES typedef void (*VPF) (int&, int&) ; VPF pFunc; VPF pFunc2; void (*pFunc3)(int&, int&); void (*pFunc4)(int&, int&);

P UNTEROS A MÉTODOS DE UNA CLASE Estos punteros a métodos se utilizan de la misma forma que los punteros a funciones, solo que necesitan un objeto de la clase correcta con el cual invocarlos. Para hacerlo se utiliza la misma declaración vista anteriormente pero se incluye el nombre de la función y el operador scope (::) antes del nombre del puntero. Hasta este momento todos los punteros han sido referenciados a funciones en general no incluidas en clases. También es posible crear punteros a funciones miembro de una clase. Informática II 2011/2 21

Informática II 2011/2 22 P UNTEROS A MÉTODOS DE UNA CLASE #include using namespace std; class Mammal { public: Mammal():itsAge(1) { } virtual ~Mammal() { } virtual void Speak() const = 0; virtual void Move() const = 0; protected: int itsAge; }; class Dog : public Mammal{ public: void Speak()const { cout << "Woof!\n"; } void Move() const { cout << "Walking...\n"; } }; class Cat : public Mammal { public: void Speak()const { cout << "Meow!\n"; } void Move() const { cout << "slinking...\n"; } }; class Horse : public Mammal { public: void Speak()const { cout << "Whinny!\n"; } void Move() const { cout << "Galloping...\n"; } }; int main() { void (Mammal::*pFunc)() const =0; Mammal* ptr =NULL; int Animal; int Method; bool fQuit = false; while (fQuit == false) { cout << "(0)Quit (1)dog (2)cat (3)horse: "; cin >> Animal; switch (Animal) { case 1: ptr = new Dog; break; case 2: ptr = new Cat; break; case 3: ptr = new Horse; break; default: fQuit = true; break; } if (fQuit) break; cout << "(1)Speak (2)Move: "; cin >> Method; switch (Method) { case 1: pFunc = Mammal::Speak(); break; default: pFunc = Mammal::Move(); break; } (ptr->*pFunc)(); delete ptr; } return 0; }

U SANDO A RREGLOS DE PUNTEROS A MÉTODOS DE UNA CLASE. Como los punteros a funciones, los punteros a funciones miembro pueden ser almacenados en arreglos. El arreglo puede ser inicializado con la dirección de varias funciones miembro, y estas pueden ser llamadas mediante el índice del arreglo. 1 Puede verse confuso en un principio, pero luego de creardo el vector, puede hacer el programa mucho más fácil de comprender y leer. 2 Informática II 2011/2 23 Llame los punteros referenciados a las funciones miembro de un objeto específico de una clase, usando typedef para hacer la definición de los punteros y las declaraciones más fácil de leer.

Informática II 2011/2 24 U SANDO A RREGLOS DE PUNTEROS A MÉTODOS DE UNA CLASE. //Listing Array of pointers to member functions #include using namespace std; class Dog { public: void Speak()const { cout << "Woof!\n"; } void Move() const { cout << "Walking to heel...\n"; } void Eat() const { cout << "Gobbling food...\n"; } void Growl() const { cout << "Grrrrr\n"; } void Whimper() const { cout << "Whining noises...\n"; } void RollOver() const { cout << "Rolling over...\n"; } void PlayDead() const { cout << "Is this the end of Little dog?\n"; } }; typedef void (Dog::*PDF)()const ; int main() { const int MaxFuncs = 7; PDF DogFunctions[MaxFuncs] = { Dog::Speak, Dog::Move, Dog::Eat, Dog::Growl, Dog::Whimper, Dog::RollOver, Dog::PlayDead }; Dog* pDog =NULL; int Method; bool fQuit = false; while (!fQuit) { cout << "(0)Quit (1)Speak (2)Move (3)Eat (4)Growl"; cout << " (5)Whimper (6)Roll Over (7)Play Dead: "; cin >> Method; if (Method == 0) { fQuit = true; } else { pDog = new Dog; (pDog->*DogFunctions[Method-1])(); delete pDog; } } return 0; }

Informática II 2011/2 25

B IBLIOGRAFÍA Pagina de Referencia lenguaje C++: ception/exception/ ception/exception/ dexcept/ dexcept/ Sams Teach yourselft C++ in 21 days: Heading1 26 Informática II 2011/2

Informática II 2009/2 27