/**
*
* \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()