Mientras estaba leyendo la respuesta aceptada de this question, tenía la siguiente pregunta:¿Una excepción a la regla de "solo una implementación"?
Por lo general, los métodos están definidos en los archivos de cabecera (.hpp
o lo que sea), y la aplicación en los archivos de origen (.cpp
o lo que sea).
Una de las principales razones por las que es una mala práctica incluir un "archivo fuente" (#include <source_file.cpp>
) es que su implementación de métodos se duplicaría, lo que provocaría errores de enlace.
Cuando uno escribe:
#ifndef BRITNEYSPEARS_HPP
#define BRITNEYSPEARS_HPP
class BritneySpears
{
public:
BritneySpears() {}; // Here the constructor has implementation.
};
#endif /* BRITNEYSPEARS_HPP */
Él está dando la aplicación del constructor (en este caso una implementación "vacío", pero aún así).
Pero por qué entonces incluir este archivo de encabezado varias veces (aka. En diferentes archivos de origen) se no generar un error de "definición duplicada" en tiempo de enlace?
Aquí hay otra respuesta acerca de la regla de definición en línea: http://stackoverflow.com/questions/908830/isnt-cs-inline-totally-optional/910686#910686 –
BTW, BritneySpears tiene un vínculo débil en su código. Como en la vida real :) –
Deja a Britney sola –