- C++ no es C. Usa el que más te convenga en cada momento.
- Si programas en C++, usa su librería estándar, STL, siempre que puedas.
- 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. - 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_castyreinterpret_cast. - Un casting con
static_castse 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. - Un casting con
dynamic_castse 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. - Un casting con
const_castno cambia de tipo sino que cambia los modificadoresconstyvolatile. - Un casting con
reinterpret_castse usa para hacer cambios de tipo a nivel de bits, es decir, para convertir entre tipos totalmente distintos. - Una función dentro de una clase que tenga el modificador
const(por ejemplovoid 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. - Una función virtual pura debe ser declarada como
virtuale 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. - 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; - 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
.hy 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. - 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
ifya que son mucho más propensas a errores. - Las excepciones deben representar el error que se produce, no quién las lanza o desde donde se lanzan.
- Siempre que puedas, usa objetos creados en el
stacken lugar de en elheap. 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. - Usa herramientas automatizadas para probar y depurar las aplicaciones (como
valgrindpara fugas de memoria). - Nunca confies en que lo has revisado todo.
17 pequeñas notas sobre programación en C++
10/05/2010 | 16:59






