You are on page 1of 11

Dcima Sesin

Metodologas y Tcnicas de Programacin II

Programacin Orientada a Objeto (POO) C++

Funciones inline
1

Estado del Programa


Introduccin a la POO Repaso de Conceptos
Historia de la Programacin Conceptos de POO Estndares de Programacin Punteros " Memoria C++ Mi primera Clase E! Control " Operadores

Clases " O#$etos en C++


%so " aplicacin Constructores Constantes e inline

Funciones &migas !o#recarga de Funciones

!o#recarga
'e Operadores Creacin 'inmica de O#$etos

Herencia(

)ipos de *isi#ilidad

Herencia M+ltiple

Polimor,ismo
Funciones *irtuales Polimor,ismo " !o#recarga(

Plantillas

Contenedores

Iteradores

10.1 Repaso de Sesiones Anteriores


Compilacin y Enla ado por separado
&lumno(.
include Alumno.h

&lumnoM-(.
include Alumno.h include AlumnoM2.h include AlumnoM2.h

&lumno(cpp

&lumnoM-(cpp

test/main(cpp

Compilador

Compilador

Compilador

&lumno(o#$

&lumnoM-(o#$
Enla0ador

test/main(o#$

Practica1(e2e 3

10.1 Repaso de Sesiones Anteriores


const
El moti4o unicial para usar const ,ue para eliminar el uso de la directi4a de compilacin 5de,ine para sustitucin de 4alores( )iene 4enta$as so#re 5de,ine(
const float nota_esperada = 8; cont int cantidad = 19; Alumnos curso[cantidad]; #define NOTA_ESPERADA 8

Punteros constantes6
// p es un puntero que apunta // a: un entero constante. const int* p; const int *p; // w es un puntero constante // que apunta a: un entero. int i=3; int* const w *w = 2; = &i; // Est bien o est mal?

En C++ lo me$or es utili0ar una re,erencia constante en lugar de paso por 4alor( %n m7todo 8ue no modi,ica ning+n atri#uto se de#er9a escri#ir como constante " as9 se podr9a usar desde o#$etos constantes(
:

10.2 Funciones inline


Conceptos pre!ios
Cuando escri#imos el nom#re de una ,uncin dentro de un programa decimos 8ue ;llamamos; a esa ,uncin( Esto 8uiere decir 8ue lo 8ue .ace el programa es ;saltar; a la ,uncin< e$ecutarla " retornar al punto en 8ue ,ue llamada(
(( (( ,>? (( (( ,>? ,,,,,, (( ,,,,,, (( (( (( ,,,,,,

Con ,unciones inline en lugar de e2istir una +nica copia de la ,uncin dentro del cdigo< cuando se declara una ,uncin como ;inline; lo 8ue se .ace es insertar su cdigo en el lugar en 8ue se reali0a la llamada< en lugar de in4ocar a la ,uncin(
=

10.2 Funciones inline


E"iciencia
C++ se pens como un lengua$e 8ue aunara t7cnicas de Programacin Orientada a Objeto >para reutili0ar de ,orma sistemti4a?< " e,iciencia< rapide (

#$nciones inline
El cdigo generado para la ,uncin cuando el programa se compila< se inserta en el p$nto donde se in!oca a la "$ncin< en lugar de .acerlo en otro lugar " .acer una llamada( El cdigo de estas ,unciones se ejec$ta m%s r%pidamente< "a 8ue se e4ita usar la pila para pasar parmetros " se e4itan las instrucciones de salto " retorno )am#i7n tiene un incon4eniente6 se generar el cdigo de la ,uncin tantas 4eces como 7sta se use< con lo 8ue el programa ejec$table ,inal puede ser muc.o m%s grande( Es por esos dos moti4os por los 8ue slo se usan ,unciones inline cuando las "$nciones son pe&$e'as(
@

10.2 Funciones inline


(eclaracin de #$nciones inline
Ha" dos maneras como .emos 4isto6
class Ejemplo { public: Ejemplo(int a = 0) : a_(a) {} private: int a_; } }; inline Ejemplo::Ejemplo(int a) : A(a) { }

class Ejemplo { public: Ejemplo(int a = 0); private: int a_;

Cada 4e0 8ue declaremos un o#$eto de la clase E$emplo se insertar el cdigo correspondiente a su constructor( !i no es inline cuando declaremos o#$etos de la clase E$emplo se .ar una llamada al constructor " slo e2istir una copia del cdigo del constructor en nuestro programa( 1

10.2 Funciones inline


#$nciones inline
%sar ,unciones inline es transparente en s$ $so >main>? o donde sea?< " as9 de#e ser( El comportamiento lgico de una ,uncin de#e ser id7ntico aun8ue sea inline >de otro modo su compilador no ,unciona?( Aa +nica di,erencia 4isi#le es el rendimiento( Aa tentacin es usar declaraciones inline en c$al&$ier parte dentro de la clase por8ue a.orran el paso e2tra de .acer una deBnicion de m7todo e2terna( )M*+, Aa idea de una ,uncin inline es dar al compilador mejores oport$nidades de optimi0acin< pero si declaramos inline una ,uncin grande pro4ocaremos 8ue el cdigo se dupli8ue all9 donde se llame la ,uncin< " anularemos el #ene,icio de 4elocidad o#tenido(
C

10.2 Funciones inline


Ejemplo
( #include
<iostream.h> ENLINEA inline ENLINEA int& x) { if (x > 0) x_ = x; else private: int x_; public: Contador(); void poner(const int& x); int leer(void) const; void incrementar(void); }; ENLINEA x_(0) {}; Contador::Contador() : } } ENLINEA int Contador::leer(void) const { return x_; }; ENLINEA void Contador::incrementar(void) { x_++; x_ = 0; void Contador::poner(const

( //#define
{

#define ENLINEA class Contador

10.2 Funciones inline


Ejemplo
( (
// Utilizamos const en lugar de #define const int num_contadores = 20000; // Definimos un array de objetos de la clase // Contador. Se llama al constructor por cada uno. Contador contadores[num_contadores]; for (int i=0;i<num_contadores;i++) { contadores[i].poner(10); for (int j=0;j<num_contadores;j++) { contadores[i].poner(j); contadores[i].incrementar(); } //cout << "Contador numero" << i << // // } " con Valor: " << contadores[i].leer() << endl;
jlmarina@PWPRT005:~/tmp/inline$ time ./si real user sys 0m1.009s 0m1.004s 0m0.004s

jlmarina@PWPRT005:~/tmp/inline$ time ./no real user sys 0m3.696s 0m3.688s 0m0.008s

1E

10.3 Resumen
inline
!ustitu"e la utili0acin de macros 8ue es mu" com+n en la programacin en C( !e pens para dotar al lengua$e C++ de ma"or e,iciencia( Es una sugerencia para el compilador( Ha" dos maneras de de,inir un m7todo de una clase como inline( Es pre,eri#le la 8ue se utili0a en la implementacin " no en la declaracin de la clase(

11

You might also like