Quelle dérivation utiliser ? ( qq. idées )
La dérivation publique s’utilise quand B est une sorte de A (AKO = A Kind Of) (B est un cas particulier de A)
La dérivation privée s’utilise quand B n’est pas une sorte de A, la classe dérivée B restreint les fonctionnalités de A, on veut alors tout masquer à l’utilisateur extérieur.
exemple : Une classe Pile est créé à partir d’une classe Tableau. On se sert d’un tableau pour gérer une pile, mais une pile n’est pas véritablement une sorte de tableau. On pourrait tout aussi bien utiliser une liste chainée pour gérer une pile, mais une pile n’est pas non plus une sorte de liste chaînée.
class Tableau { int *tab, nb; public : Tableau( int ); Tableau( const Tableau & ); ~Tableau( ); Tableau & operator = ( const Tableau & ); int & operator [ ] ( int ) ; int taille( ) { return nb ; } }
class Pile : private Tableau { int sommet; public : Pile( int n ) : Tableau( n ) { sommet = -1 ; } void empile( int e ) { (*this)[ ++sommet ] = e ; } int depile( ) { return (*this)[ sommet– ] ; } BOOL vide( ) { return sommet == -1 ; } BOOL plein( ) { return taille() == sommet ; } }