iostream
Cete bonne pratique nécessite au minimum
le fichier .hpp :
#ifndef SAMPLE_CLASS_HPP # define SAMPLE_CLASS_HPP #includeclass Sample { public: Sample( void ); //canonical Sample( int const nb); Sample( Sample const & src ); //canonical ~Sample( void ); //canonical int getNb( void ) const; Sample & operator=( Sample const & rhs ); //canonical private: int _nb; }; std::ostream & operator<<(std::ostream & o, Sample const & i); #endif
le fichier .cpp :
#include <iostream> #include "Sample.class.hpp" Sample::Sample( void ) : _nb(0) { std::cout << "Default Constructor called" << std::endl; return; } Sample::Sample( int const nb ) : _nb(nb) { std::cout << "Parametric Constructor called" << std::endl; return; } Sample::Sample( Sample const & src ) { std::cout << "Copy constructor called" << std::endl; *this=src; return; } Sample::~Sample( void ) { std::cout << "Destructor called"<< std::endl; return; } int Sample::getNb( void ) const { return (this->_nb); } Sample & Sample::operator=( Sample const & rhs ) { std::cout << "Assignation operator called"<< this->_nb; if (this != &rhs) this->_nb = rhs.getNb(); // retourne l'addresse de this, soit la reference return(*this); } // surcharge de simple fonction // surcharge de ostream << std::ostream & operator<<( std::ostream & o, Sample const & rhs) { o << "The value of foo is :"<< rhs.getNb(); return (o); }
le fichier main :
#include "Sample.class.hpp" int main () { Sample instance1; Sample instance2 (42); Sample instance3(instance1); std::cout << instance1 << std::endl; std::cout << instance2 << std::endl; std::cout << instance3 << std::endl; instance3 = instance2; std::cout << instance3 << std::endl; return (0); }
le resultat :
Default Constructor called Parametric Constructor called Copy constructor called Assignation operator called22014The value of foo is :0 The value of foo is :42 The value of foo is :0 Assignation operator called0The value of foo is :42 Destructor called Destructor called Destructor called