17 pequeñas notas sobre programación en C++

  1. C++ no es C. Usa el que más te convenga en cada momento.
  2. Si programas en C++, usa su librería estándar, STL, siempre que puedas.
  3. No reinventes la rueda, si necesitas mayor funcionalidad, usa librerías que la proporcionen y que estén en un estado de madurez suficiente, como la librería boost.
  4. No se recomienda que los castings se hagan de forma implícita o de la forma que lo hace C. Se recomienda usar su nueva sintaxis: static_cast, dynamic_cast, const_cast y reinterpret_cast.
  5. Un casting con static_cast se evalúa en tiempo de compilación y es el más parecido al casting implícito de C. Se usa para convertir un tipo de dato en otro.
  6. Un casting con dynamic_cast se usa para hacer castings en tiempo de ejecución pero sólo para objetos polimórficos, esto es, para recorrer la jerarquía de clases. No funcionará con tipos básicos.
  7. Un casting con const_cast no cambia de tipo sino que cambia los modificadores const y volatile.
  8. Un casting con reinterpret_cast se usa para hacer cambios de tipo a nivel de bits, es decir, para convertir entre tipos totalmente distintos.
  9. Una función dentro de una clase que tenga el modificador const (por ejemplo void MiClase::MiFuncion() const { ... }) no modifica el contenido del objeto (no modifica los campos del objeto). Esto se usa para ejecutar funciones dentro de instancias constantes.
  10. Una función virtual pura debe ser declarada como virtual e igualada a cero dentro de la clase: virtual void MiFuncionVirtualPura() = 0;. Este tipo de funciones deben ser implementadas en las clases derivadas. Además, no se pueden instanciar clases que tengan funciones virtuales puras.
  11. Las variables miembro (propiedades) estáticas de una clase deben ser definidas fuera de la clase para que funcionen correctamente (si no se definen así, el error lo produce el linker: Undefined reference to MiClase::count):
    class MiClase {
    	public:
    		static int count;
    }
    
    int MiClase::count = 0;
    
  12. Las clases y funciones con plantillas se deben declarar e implementar en el mismo archivo ya que, como el código se genera en tiempo de compilación, si se declara en un .h y se implementa en un .cpp, es el linker el que no encuentra el código generado. Hay más soluciones, pero ninguna es buena del todo.
  13. Usa el sistema de gestión de excepciones de C++ y evita en lo posible el uso de valores de retorno indicando errores y sentencias if ya que son mucho más propensas a errores.
  14. Las excepciones deben representar el error que se produce, no quién las lanza o desde donde se lanzan.
  15. Siempre que puedas, usa objetos creados en el stack en lugar de en el heap. Con esto evitarás fugas de memoria (memory leak en inglés) ya que los objetos se destruyen cuando finaliza el ámbito de los mismos.
  16. Usa herramientas automatizadas para probar y depurar las aplicaciones (como valgrind para fugas de memoria).
  17. Nunca confies en que lo has revisado todo.

Deja tu comentario:

Puedes usar las etiquetas XHTML <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

?

Please leave these two fields as-is: