Вы находитесь на странице: 1из 11

DcimaSesin

Metodologas y Tcnicas de Programacin II

Programacin Orientada a Objeto (POO) C++

Funciones inline
1

EstadodelPrograma
Introduccin a la POO Repaso de Conceptos
Historia de la Programacin Conceptos de POO Estndares de Programacin Punteros y Memoria C++ Mi primera Clase E/S Control y Operadores

Clases y Objetos en C++


Uso y aplicacin Constructores Constantes e inline

Funciones Amigas Sobrecarga de Funciones

Sobrecarga
De Operadores Creacin Dinmica de Objetos

Herencia.

Tipos de Visibilidad

Herencia Mltiple

Polimorfismo
Funciones Virtuales Polimorfismo y Sobrecarga.

Plantillas

Contenedores

Iteradores

10.1RepasodeSesionesAnteriores
Compilacin y Enlazado por separado
Alumno.h
includeAlumno.h

AlumnoM2.h
includeAlumno.h includeAlumnoM2.h includeAlumnoM2.h

Alumno.cpp

AlumnoM2.cpp

test_main.cpp

Compilador

Compilador

Compilador

Alumno.obj

AlumnoM2.obj
Enlazador

test_main.obj

Practica7.exe 3

10.1RepasodeSesionesAnteriores
const
El motivo unicial para usar const fue para eliminar el uso de la directiva de compilacin #define para sustitucin de valores. Tiene ventajas sobre #define.
constfloatnota_esperada=8; contintcantidad=19; Alumnoscurso[cantidad]; #defineNOTA_ESPERADA8

Punteros constantes:
// p es un puntero que apunta // a:unenteroconstante. constint*p; constint*p; //wesunpunteroconstante //queapuntaa:unentero. inti=3; int*constw=&i; *w=2;//Estbienoestmal?

En C++ lo mejor es utilizar una referencia constante en lugar de paso por valor. Un mtodo que no modifica ningn atributo se debera escribir como constante y as se podra usar desde objetos constantes.
4

10.2Funcionesinline
Conceptos previos
Cuando escribimos el nombre de una funcin dentro de un programa decimos que "llamamos" a esa funcin. Esto quiere decir que lo que hace el programa es "saltar" a la funcin, ejecutarla y retornar al punto en que fue llamada.
.. .. f() .. .. f() ffffff .. ffffff .. .. .. ffffff

Con funciones inline en lugar de existir una nica copia de la funcin dentro del cdigo, cuando se declara una funcin como "inline" lo que se hace es insertar su cdigo en el lugar en que se realiza la llamada, en lugar de invocar a la funcin.
5

10.2Funcionesinline
Eficiencia
C++ se pens como un lenguaje que aunara tcnicas de Programacin Orientada a Objeto (para reutilizar de forma sistemtiva), y eficiencia, rapidez.

Funciones inline
El cdigo generado para la funcin cuando el programa se compila, se inserta en el punto donde se invoca a la funcin, en lugar de hacerlo en otro lugar y hacer una llamada. El cdigo de estas funciones se ejecuta ms rpidamente, ya que se evita usar la pila para pasar parmetros y se evitan las instrucciones de salto y retorno Tambin tiene un inconveniente: se generar el cdigo de la funcin tantas veces como sta se use, con lo que el programa ejecutable final puede ser mucho ms grande. Es por esos dos motivos por los que slo se usan funciones inline cuando las funciones son pequeas.
6

10.2Funcionesinline
Declaracin de Funciones inline
Hay dos maneras como hemos visto:
classEjemplo { public: Ejemplo(inta=0):a_(a){} private: inta_; }

classEjemplo { public: Ejemplo(inta=0); private: inta_; };

inlineEjemplo::Ejemplo(inta):A(a) { }

Cada vez que declaremos un objeto de la clase Ejemplo se insertar el cdigo correspondiente a su constructor. Si no es inline cuando declaremos objetos de la clase Ejemplo se har una llamada al constructor y slo existir una copia del cdigo del constructor en nuestro programa. 7

10.2Funcionesinline
Funciones inline
Usar funciones inline es transparente en su uso (main() o donde sea), y as debe ser. El comportamiento lgico de una funcin debe ser idntico aunque sea inline (de otro modo su compilador no funciona). La nica diferencia visible es el rendimiento. La tentacin es usar declaraciones inline en cualquier parte dentro de la clase porque ahorran el paso extra de hacer una denicion de mtodo externa. MAL! La idea de una funcin inline es dar al compilador mejores oportunidades de optimizacin, pero si declaramos inline una funcin grande provocaremos que el cdigo se duplique all donde se llame la funcin, y anularemos el beneficio de velocidad obtenido.
8

10.2Funcionesinline
Ejemplo
. #include<iostream.h> . //#defineENLINEAinline
#defineENLINEA classContador { private: intx_; public: Contador(); voidponer(constint&x); intleer(void)const; voidincrementar(void); }; ENLINEA x_(0){}; Contador::Contador() : ENLINEA int&x) { if(x>0) x_=x; else x_=0; } ENLINEAintContador::leer(void)const { returnx_; }; ENLINEA voidContador::incrementar(void) { x_++; } void Contador::poner(const

10.2Funcionesinline
Ejemplo
. //Utilizamosconstenlugarde#define
constintnum_contadores=20000;

. //Definimosunarraydeobjetosdelaclase
Contadorcontadores[num_contadores]; for(inti=0;i<num_contadores;i++) { contadores[i].poner(10); for(intj=0;j<num_contadores;j++) { contadores[i].poner(j); contadores[i].incrementar(); } //cout<<"Contadornumero"<<i<< //"conValor:"<< //contadores[i].leer()<<endl; }

//Contador.Sellamaalconstructorporcadauno.
jlmarina@PWPRT005:~/tmp/inline$time./si real0m1.009s user0m1.004s sys0m0.004s jlmarina@PWPRT005:~/tmp/inline$time./no real0m3.696s user0m3.688s sys0m0.008s

10

10.3Resumen
inline
Sustituye la utilizacin de macros que es muy comn en la programacin en C. Se pens para dotar al lenguaje C++ de mayor eficiencia. Es una sugerencia para el compilador. Hay dos maneras de definir un mtodo de una clase como inline. Es preferible la que se utiliza en la implementacin y no en la declaracin de la clase.

11

Вам также может понравиться