Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Solo sul mare si ? davvero liberi.

Eugene O'Neill 

Sondaggio:

Meglio le donne...

Bionde
More
Rosse

visualizza risultati


 

Template ed ereditarieta`

 

E` possibile utilizzare contemporaneamente ereditarieta` e template in vari modi. Supponendo di avere una gerarchia di figure geometriche potremmo ad esempio avere le seguenti istanze di TList:


  TList < TBaseShape > ShapesList;
  TList < TRectangle > RectanglesList;
  TList < TTriangle > TrianglesList;


tuttavia in questi casi gli oggetti ShapesList, RectanglesList e TrianglesList non sono legati da alcun vincolo di discendenza, indipendentemente dal fatto che le classi TBaseShape, TRectangle e TTriangle lo siano o meno. Naturalmente se TBaseShape e` una classe base delle altre due, e` possibile memorizzare in ShapesList anche oggetti TRectangle e TTriangle perche` in effetti TList memorizza dei riferimenti, sui quali valgono le stesse regole per i puntatori a classi base.
Istanze diverse dello stesso template non sono mai legate dunque da relazioni di discendenza, indipendentemente dal fatto che lo siano i parametri delle istanze del template. La cosa non e` poi tanto strana se si pensa al modo in cui sono gestiti e istanziati i template.
Un altro modo di combinare ereditarieta` e template e` dato dal seguente esempio:


  template< typename T >
  class Base {
    /* ... */
  };

  template< typename T >
  class Derived : public Base< T > {
    /* ... */
  };

  Base < double > A;
  Base < int > B;
  Derived < int > C;


in questo caso l'ereditarieta` e` stata utilizzata per estendere le caratteristiche della classe template Base, Tuttavia anche in questo caso tra le istanze dei template non vi e` alcuna relazione di discendenza, in particolare non esiste tra B e C; un puntatore a Base < T > non potra` mai puntare a Derived < T >.

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2019 Cataldo Sasso