Hein?! non, on gagne la reciprocite avec les operator friend que si on en defini deux.. De plus, si avec un int les friends peuvent etre utilent, c´est souvent genant de devoir tout remettre en friend pour les fils:
( mauvais exemple, mais exemple tout de meme)
/ * le hpp */
- ifndef _TEST_HPP_
- define _TEST_HPP_
class Entier;
class Vector
{
public:
friend class Entier;
Vector( const double x_, const double y_, const double z_ ) ;
private:
double x, y, z;
};
class Entier
{
public:
Entier( int e_ ) ;
virtual void addToVectorX( Vector & ) const;
private:
const int e;
};
class Float : public Entier
{
public:
Float( const float f_ ) ;
void addToVectorX( Vector & ) const;
private:
const float f;
};
- endif / * _TEST_HPP_ */
/ * le cpp */
- include " Test.hpp"
Vector::Vector( const double x_, const double y_, const double z_ ) : x( x_ ) , y( y_ ) , z( z_ ) {}
Entier::Entier( int e_ ) : e( e_ ) { }
void Entier::addToVectorX( Vector & ) const
{
vec.x += e;
}
Float::Float( const float f_ ) : Entier( static_cast<int>(f_) ) , f( f_ ) {}
void Float::addToVectorX( Vector & ) const
{
vec.x += f; / / erreur
}
int main( int argc, char ** argv )
{
Vector v1( 1.0, 2.0, 3.0 ) ;
Entier e1( 3 ) ;
Float f1( 2.6f ) ;
e1.addToVectorX( v1 ) ;
f1.addToVectorX( v1 ) ; / / error
return 0;
}