¡Nuevo!  por fin disponible la versión 5 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


4.13.1 Reglas de buena práctica

§1 Preámbulo

En C++ existen una serie de reglas y consejos de buena práctica que ayudan a escribir mejores programas con menos errores.  Hemos señalado que la "Biblia" del C++ [1] contiene al final de cada capítulo una serie de consejos ("Advice") que constituyen en sí mismos todo un compendio de programación C++ (las más de las veces incluyen cosas que no deben hacerse).

Scott Meyers [2] ha escrito dos libros muy populares sobre C++: "Effective C++" y "More Effective C++"; ambos publicados por Addison-Wesley, en los que se recogen una serie de recomendaciones y consejos de buena práctica. Algunas de ellas consideran tan importantes, que el compilador GNU cpp dispone de una opción especial (-Weffc++) que advierte cuando el código las contradice. Son las siguientes:

  • Definir un constructor-copia ( 4.11.2d4) y una versión sobrecargada del operador de asignación ( 4.9.18a) para clases que utilicen memoria dinámica (persistente 1.3.2).
  • Preferir inicialización antes que asignación en los constructores ( 4.11.2d3).
  • Hacer virtuales ( 4.11.8a) los destructores ( 4.11.2d2) en las superclases, en especial si los constructores de las subclases asignan memoria con new.
  • Cuando se sobrecargue el operador de asignación = ( 4.9.18a), disponerlo de forma que devuelva una referencia a *this ( 4.11.6).
  • No devolver una referencia ( 4.2.3) cuando se deba devolver un objeto.
  • Cuando se sobrecarguen los operadores de incremento ++ y decremento -- ( 4.9.1), distinguir entre las formas "Pre" y "Post" ( 4.9.18c).
  • No sobrecargar nunca los operadores coma , ( 4.9.5); Y lógico && (AND 4.9.8) y O lógico || (OR 4.9.8).
§2  Diseño canónico

Como regla general, no olvide que la definición de cualquier clase C que no sea trivial debe contener al menos:

  • Un constructor por defecto: C::C();
  • Un constructor-copia: C::C(const C&);
  • Un operador de asignación para miembros de la clase: C& C::operator=(const C&);
  • Un destructor: C::~C();

Cuando todos estos métodos son públicos, que es lo más frecuente, se dice que la clase adopta forma o diseño canónico. Pero son posibles toda clase de variantes para fines específicos. Por ejemplo: que los objetos no puedan ser libremente copiados, creados o asignados.

  Inicio.


[1] Stroustrupo TC++PL "The C++ Programming Languaje".

[2]   www.aristeia.com