Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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