- include < stdio.h>
- include < typeinfo>
class Base
{
public:
int m_iValue;
Base() : m_iValue( 0 ) {};
Base( int value ) : m_iValue( value ) {}
virtual float getValue( void ) const { return ( float) m_iValue; }
};
class Extended : public Base
{
public:
float m_fValue;
Extended() : Base( 0 ) , m_fValue( 0.0f ) { }
Extended( float value ) : Base( ( int) value ) , m_fValue( value ) { }
virtual float getValue( void ) const { return m_fValue; }
};
class Test
{
public:
Base m_base;
Test( const Base & ) : m_base( base ) {}
};
int main( int, char ** )
{
Base a( 5 ) ;
Extended b( 6.5f ) ;
Test c( a ) ;
Test d( b ) ;
printf( " %d %d\n", sizeof( Base ) , sizeof( Extended ) ) ;
printf( " %f\n", a.getValue() ) ;
printf( " %f\n", b.getValue() ) ;
printf( " %f\n", c.m_base.getValue() ) ;
printf( " %f\n", d.m_base.getValue() ) ;
printf( " %s -- %s\n", typeid( a ) .name(), typeid( b ) .name() ) ;
printf( " %s -- %s\n", typeid( c.m_base ) .name(), typeid( d.m_base ) .name() ) ;
Extended *ext = dynamic_cast<Extended*>(&.m_base);
if( ext )
printf( " %f\n", ext->getValue() ) ;
else
printf( " Cannot convert..\n" ) ;
return 0;
}
Pas de warning, mais on a clairement pas la bonne valeur..