Disponible la nueva versión "donationware" 7.3 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

"Remember that the aims are simplicity, regularity, and performance. You don't prove that you are clever by producing the most complicated code". Bjarne Stroustrup en "The State of the Language" una entrevista con Danny Kalev en DevX.com

§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