// Fichier genere avec ./genere -t2 Base #include "Base.h" //-- template Base::Base(void) : _baseObject(T1()), _basePointer((T2*)NULL) { } //-- template Base::Base(const Base& aB) { _copy(aB); } //-- template Base& Base::operator=(const Base& aB) { if (this != &aB) { _destroy(); _copy(aB); } return *this; } //-- template Base::~Base(void) { _destroy(); } //-- template bool operator==(const Base& aB1, const Base& aB2) { return aB1.isEqualTo(aB2); } //-- template bool operator!=(const Base& aB1, const Base& aB2) { return !(aB1==aB2); } //-- template void Base::setBaseObject(const T1& object) { _baseObject = object; } template const T1& Base::getBaseObject(void) const { return _baseObject; } //-- template void Base::setBasePointer(const T2* pointer) { _destroy(); if (pointer) _basePointer = new T2(*pointer); else _basePointer = NULL; } template const T2* Base::getBasePointer(void) const { return _basePointer; } //-- template ostream& operator<<(ostream& os, const Base& aB) { aB.display(os); return os; } //-- template void Base::display(ostream& os) const { if (_basePointer) os << '(' << _baseObject << ',' << *_basePointer << ')'; else os << '(' << _baseObject << ',' << "NULL" << ')'; } //-- template bool Base::isEqualTo(const Base& aB) const { if (_baseObject != aB._baseObject) return false; if (_basePointer && aB._basePointer) { if (*_basePointer != *aB._basePointer) return false; } else { if (_basePointer!=aB._basePointer) return false; } return true; } //-- template void Base::_copy(const Base& aB) { _baseObject = aB._baseObject; if (aB._basePointer) _basePointer = new T2(*aB._basePointer); else _basePointer = NULL; } //-- template void Base::_destroy(void) { if (_basePointer) delete _basePointer; }