Toon posts:

overerving template in C++

Pagina: 1
Acties:
  • 150 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi allemaal,

Ik heb een aantal vraagjes over templates.
Ik heb veel voorbeelden gezien (in boeken en forums) maar weet niet hoe het precies zit met het overerven van templates in verschillende klasses.

Stel ik defineer de volgende twee classes moet ik dan alleen bij de superklasse (stack) zetten? dus zo

-- begin code

template<class type>class Stack{
public:
typedef int value_type;
virtual bool empty() const = 0;
virtual int size() const = 0;
virtual value_type top() const = 0 ;
virtual void push(const value_type & x)=0;
virtual void pop()=0 ;
};


class StackArray : public simpleStack{
public:
StackArray();
bool empty() const ;
int size() const;
value_type top() const;
void push(const value_type & x);
void pop() ;

private:
enum{ Capacity = 99 };
int nextpos;
int data[Capacity];
};

------eind code

Als ik dit doe dan wil de klasse stack array specialization parameters. Wat word er bedoeld hiermee? Hoe definieer ik dat bij een subklasse?

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Bedoel je dat je wilt afleiden van een template basis klasse?
(ik snap niet helemaal waarom je van simpleStack afleidt?)
Maar dan moet je ongeveer het volgende gebruiken
code:
1
2
3
4
5
6
7
template<class type>
class Stack 
{ ... };

template<class type>
class ArrayStack : public Stack<type>
{ ... };

Of als je al vast wilt leggen welk data type gebruikt moet worden:
code:
1
class ArrayStack : public Stack<int>

Verwijderd

Topicstarter
Ik kreeg de header voorgeschoteld.
Ik weet ook niet waarom maar ik mag de header niet aanpassen, ik weet ook niet waarom alles als const gedefinieerd is want het moet zo dynamisch mogelijk zijn allemaal, i.i.g. bedankt voor de supersnelle hulp.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op woensdag 19 december 2001 23:44 schreef reetkever41 het volgende:
Hoi allemaal,

Ik heb een aantal vraagjes over templates.
Ik heb veel voorbeelden gezien (in boeken en forums) maar weet niet hoe het precies zit met het overerven van templates in verschillende klasses.
Ik denk dat je al begint met een fout uitgangspunt. Een class template definieert een (oneindige) set classes. Een andere class kan niet van al die classes erven.
Stel ik defineer de volgende twee classes moet ik dan alleen bij de superklasse (stack) zetten? dus zo

-- begin code

template<class type>class Stack{
public:
typedef int value_type;
virtual bool empty() const = 0;
virtual int size() const = 0;
virtual value_type top() const = 0 ;
virtual void push(const value_type & x)=0;
virtual void pop()=0 ;
};

class simpleStackArray : public Stack{ // edit MSalters.
public:
simpleStackArray();
bool empty() const ;
int size() const;
value_type top() const;
void push(const value_type & x);
void pop() ;

private:
enum{ Capacity = 99 };
int nextpos;
int data[Capacity];
};

------eind code

Als ik dit doe dan wil de klasse stack array specialization parameters. Wat word er bedoeld hiermee? Hoe definieer ik dat bij een subklasse?
Wat wil je ? Wat voor een stack is simpleStackArray ?
int data[Capacity] suggereert dat simpleStackArray een
stack van ints is. Dus logischerwijs moet simpleStackArray
erven van class stack<int>

Aan de andere kant - misschien moet je simpleStackArray
ook een template maken. Dan erft simpleStackArray<T> van
Stack<T>, en heeft simpleStackArray een member T data[]

Het is maar net wat je wil.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
Whoops foutje, simpleStackArray moest stackArray zijn.

int data[Capacity]
Capacity is gewoon een var voor de grote van de array, whoops een te ongewijzigde code.

Data is gewoon een type en moet idd gewoon type data[Capacity] zijn. Ze schotelde me dit voor en wilde dat ik een template ervan ging maken.

excuses te snel en te ondoordacht.

Dank jullie wel voor de expertise :)

Pvd nou weer een linker error, zucht je blijft zoeken.

owja, wat ik vaag vind in Borland C builder is het volgende

stel

Class piet{
char piet[8];
};

in object inspector netjes 'char piet[8]'

stel je doet Class piet{
char piet[8], henk[5];
};

dan veranderd piet in de object inspector van char piet[8] naar char piet (zonder 8) en word piet wel gewoon als char piet[5] in de object inspector weergegeven. Als je dan een dummy voor piet zet bijv. char dummy, piet[8], henk[5] wel weer alles gewoon weergegeven zoals het is. Is dat een bug in Borland?

Greetz Pieter

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Is dat een bug in Borland?
Geen idee. Maar de manier waarop jij je variabelen declareert is niet de standaard methode. Doe gewoon dit:
code:
1
2
char piet[8];
char henk[5];

Dit is overzichtelijker en sneller te begrijpen door andere programmeurs.
Greetz Pieter
Dit hoeft niet onder je post (zie de faq)
Pagina: 1