13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 266 — #304<br />

✐<br />

Capítulo 9. Funciones inline<br />

int i;<br />

public:<br />

Forward() : i(0) {}<br />

// Call to undeclared function:<br />

int f() const { return g() + 1; }<br />

int g() const { return i; }<br />

};<br />

int main() {<br />

Forward frwd;<br />

frwd.f();<br />

} ///:~<br />

En f(), se realiza una llamada a g(), aunque g() aún no ha sido declarada. Esto<br />

funciona porque la definición del l<strong>en</strong>guaje dice que las funciones inline <strong>en</strong> una clase<br />

no serán evaluadas hasta la llave de cierre de la declaración de clase.<br />

Por supuesto, si g() a su vez llama a f(), t<strong>en</strong>drá un conjunto de llamadas recursivas,<br />

que son demasiado complicadas para el compilador pueda hacer inline.<br />

(También, t<strong>en</strong>drá que efectuar alguna comprobación <strong>en</strong> f() o g() para forzar <strong>en</strong><br />

alguna de ellas un caso base, o la recursión será infinita).<br />

9.4.3. Actividades ocultas <strong>en</strong> contructores y destructores<br />

Constructores y destructores son dos lugares dónde puede <strong>en</strong>gañarse al p<strong>en</strong>sar<br />

que una inline es más efici<strong>en</strong>te de lo que realm<strong>en</strong>te es. Constructores y destructores<br />

pued<strong>en</strong> t<strong>en</strong>er actividades ocultas, porque la clase puede cont<strong>en</strong>er subobjetos cuyos<br />

constructores y destructores deb<strong>en</strong> invocarse. Estos subobjetos pued<strong>en</strong> ser objetos<br />

miembro (atributos), o pued<strong>en</strong> existir por her<strong>en</strong>cia (tratado <strong>en</strong> el Capítulo 14). Como<br />

un ejemplo de clase con un objeto miembro:<br />

//: C09:Hidd<strong>en</strong>.cpp<br />

// Hidd<strong>en</strong> activities in inlines<br />

#include <br />

using namespace std;<br />

class Member {<br />

int i, j, k;<br />

public:<br />

Member(int x = 0) : i(x), j(x), k(x) {}<br />

~Member() { cout

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!