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 536 — #574<br />
✐<br />
Apéndice B. Directrices de Programación<br />
usan objetos miembro). (Vea el Capítulo 14.) Si no lo hace, el constructor por<br />
defecto será invocado desde la case base (o el objeto miembro) y con mucha<br />
probabilidad no hará lo que usted espera. Para invocar el constructor de copia<br />
de la clase base, pásele el objeto derivado desde el que está copiando:<br />
Derived(const Derived& d) : Base(d) { // ...<br />
39. Cuando escriba un operador de asignación para una clase derivada, recuerde<br />
llamar explícitam<strong>en</strong>te al operador de asignación de la clase base. (Vea el Capítulo<br />
14.) SI no lo hace, no ocurrirá nada (lo mismo es aplicable a los objetos<br />
miembro). Para invocar el operador de asignación de la clase base, use el nombre<br />
de la clase base y el operador de resolución de ámbito:<br />
Derived& operator=(const Derived& d) {<br />
Base::operator=(d);<br />
40. Si necesita minimizar las recompilaciones durante el desarrollo de un proyecto<br />
largo, use FIXME: demostrada <strong>en</strong> el Capítulo 5, y eliminela solo si la efici<strong>en</strong>cia<br />
<strong>en</strong> tiempo de ejecución es un problema.<br />
41. Evite el preprocesador. Use siempre const para substitución de valores e inlines<br />
para las machos.<br />
42. Mant<strong>en</strong>ga los ámbitos tan pequeños como sea posible de modo que la visibilidad<br />
y el tiempo de vidad de los objetos sea lo más pequeño posible. Esto reduce<br />
el peligro de usar un objeto <strong>en</strong> el contexto equivocado y ello supone un bug dificil<br />
de <strong>en</strong>contrar. Por ejemplo, suponga que ti<strong>en</strong>e un cont<strong>en</strong>edor y un trozo de<br />
código que itera sobre él. Si copia el código para usarlo otro cont<strong>en</strong>edor, puede<br />
que accid<strong>en</strong>talm<strong>en</strong>te acabe usando el tamaño del primer cont<strong>en</strong>edor como<br />
el límite superior del nuevo. Pero, si el primer cont<strong>en</strong>dor estuviese fuera del<br />
ámbito, podría detectar el error <strong>en</strong> tiempo de compilación.<br />
43. Evite las variables globales. Esfuercese <strong>en</strong> pones los datos d<strong>en</strong>tro de clases. En<br />
más probable que aparezcan funciones globales de forma natural que variables<br />
globales, aunque puede que después descubra que una función global puede<br />
<strong>en</strong>cajar como método estático de una clase.<br />
44. Si necesita declara una clase o función de una librería, hágalo siempre incluy<strong>en</strong>do<br />
su fichero de cabecera. Por ejemplo, si quiere crear una función para escribir<br />
<strong>en</strong> un ostream, no declare nunca el ostream por usted mismo, usando una<br />
especificación de tipo incompleta como esta:<br />
class ostream;<br />
Este <strong>en</strong>foque hace que su código sea vulnerabla a cambios <strong>en</strong> la repres<strong>en</strong>tación.<br />
(Por ejmplo, ostream podrías ser <strong>en</strong> realidad un typedef.) En lugar de lo<br />
anterior, use siempre el ficheor de cabecera:<br />
#include <br />
Cuando cree sus propias clases, si una librería es grande, proporciones a sus<br />
usuarios una versión abreviada del fichero de cabecera con especificaciones<br />
de tipo incompletas (es decir, declaraciones de los nombres de las clases) para<br />
536<br />
✐<br />
✐<br />
✐<br />
✐