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 267 — #305<br />
✐<br />
9.5. Reducir el desord<strong>en</strong><br />
} ///:~<br />
El constructor para Member es sufici<strong>en</strong>tem<strong>en</strong>te simple para ser inline, dado que<br />
no hay nada especial <strong>en</strong> él - ninguna her<strong>en</strong>cia u objeto miembro está provocando<br />
actividades ocultas adicionales. Pero <strong>en</strong> la clase WithMembers hay más de lo que<br />
se ve a simple vista. Los constructores y destructores para los atributos q, r y s<br />
se llaman automáticam<strong>en</strong>te, y esos constructores y destructores también son inline,<br />
así que la difer<strong>en</strong>cia es significativa respecto a métodos normales. Esto no significa<br />
necesariam<strong>en</strong>te que los constructores y destructores deban ser no-inline; hay casos<br />
<strong>en</strong> que ti<strong>en</strong>e s<strong>en</strong>tido. También, cuando se está haci<strong>en</strong>do un prototipo inicial de un<br />
programa escribi<strong>en</strong>do código rápidam<strong>en</strong>te, es conv<strong>en</strong>i<strong>en</strong>te a m<strong>en</strong>udo usar inlines.<br />
Pero si está preocupado por la efici<strong>en</strong>cia, es un sitio donde mirar.<br />
9.5. Reducir el desord<strong>en</strong><br />
En un libro como éste, la simplicidad y brevedad de poner definiciones inline<br />
d<strong>en</strong>tro de las clases es muy útil porque permite meter más <strong>en</strong> una página o pantalla<br />
(<strong>en</strong> un seminario). Sin embargo, Dan Saks 2 ha apuntado que <strong>en</strong> un proyecto real esto<br />
ti<strong>en</strong>e como consecu<strong>en</strong>cia el desord<strong>en</strong> de la interfaz de la clase y eso hace que la clase<br />
sea más incomoda de usar. Él se refiere a los métodos definidos d<strong>en</strong>tro de las clases<br />
usando la expresión in situ (<strong>en</strong> el lugar) e indica que todas las definiciones deberían<br />
colocarse fuera de la clase mant<strong>en</strong>i<strong>en</strong>do la interfaz limpia. La optimización, argum<strong>en</strong>ta<br />
él, es una asunto distinto. Si se requiere optimizar, use la palabra reservada<br />
inline. Sigui<strong>en</strong>te ese <strong>en</strong>foque, el ejemplo anterior Rectangle.cpp quedaría:<br />
//: C09:Noinsitu.cpp<br />
// Removing in situ functions<br />
class Rectangle {<br />
int width, height;<br />
public:<br />
Rectangle(int w = 0, int h = 0);<br />
int getWidth() const;<br />
void setWidth(int w);<br />
int getHeight() const;<br />
void setHeight(int h);<br />
};<br />
inline Rectangle::Rectangle(int w, int h)<br />
: width(w), height(h) {}<br />
inline int Rectangle::getWidth() const {<br />
return width;<br />
}<br />
inline void Rectangle::setWidth(int w) {<br />
width = w;<br />
}<br />
inline int Rectangle::getHeight() const {<br />
return height;<br />
}<br />
2 Co-autor junto a Tom Plum de <strong>C++</strong> Programming Guidelines, Plum Hall, 1991.<br />
267<br />
✐<br />
✐<br />
✐<br />
✐