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 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 />

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

Saved successfully!

Ooh no, something went wrong!