/** * * \file CstCodErr.h * * \authors M. Laporte, D. Mathieu * * \date 10/02/2011 * * \version V1.0 * * \brief Codes d'erreurs * **/ #ifndef __CSTCODERR_H__ #define __CSTCODERR_H__ namespace nsUtil { enum {KNoExc = 0, KNoError = 0, KExcDivZero = 11, // Division par zero KExcArg = 253, KExcStd = 254, KExcInconnue = 255 }; } // namespace nsUtil #endif /* __CSTCODERR_H__ */ /** * * @file IEditable.hpp * * @authors D. Mathieu, M. Laporte * * @date 17/03/2010 * * @version V2.0 * **/ #ifndef __IEDITABLE_HPP__ #define __IEDITABLE_HPP__ #include <iostream> namespace nsUtil { class IEditable; /* */ std::ostream & operator << (std::ostream & os, const IEditable & obj); /* */ class IEditable { protected : virtual std::ostream & display (std::ostream & os) const = 0; public : virtual ~IEditable (void) {} friend std::ostream & operator << (std::ostream & os, const IEditable & obj); }; // IEditable } // nsUtil // inline pour remplacer chaque appel par le corps de la fonction // et donc éviter que ce soit une définition qui entrainerait des risuqes de multiples // définitions à l'édition de liens. inline std::ostream & nsUtil::operator << (std::ostream & os, const IEditable & obj) { return obj.display (os); } // operator << #endif /* __IEDITABLE_HPP__ */ /** * * @file ClasseEditable.cpp * * @authors D. Mathieu * * @date 24/03/2011 * * @version V2.0 * * @brief Test de la classe IEditable * **/ #include <iostream> #include "IEditable.hpp" #include "CstCodErr.h" using namespace std; using namespace nsUtil; // IEditable namespace { void contenu (const IEditable & ed) { cout << ed << endl; } class CA : public IEditable { virtual ostream & display (ostream & os) const { return os << "Objet de la classe CA\n"; } // display() public : virtual ~CA (void) {} }; // CA class CB : public IEditable { virtual ostream & display (ostream & os) const { return os << "Objet de la classe CB\n"; } // display() public : virtual ~CB (void) {} }; // CB void classeEditable (void) { CA A; CB B; contenu (A); contenu (B); }// classeEditable () } // namespace int main (int argc, char * argv []) { if (argc != 1) { cerr << "Nombre d'arguments invalide\n" "Usage : ./ClasseEditable\n"; return KExcArg; } classeEditable(); return 0; } // main()