[c++]Serializen van afgeleide classen

Pagina: 1
Acties:

  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
In een SDI project probeer ik een document te maken welke gebaseerd is op een array van pointers naar classen. Mijn probleem is, dat ik wel de parent classe kan serializen, maar ik weet niet hoe ik de afgeleide classen kan serializen. Ik zal het probleem iets proberen te verduidelijken dmv een dierentuin voorbeeld:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
classe dier{
  enum soortDier{aap, neushoorn};
  int leeftijd;
  color kleurOgen;
}
classe aap{
  color kleurVacht;
  string soortAap;
}
classe neushoorn{
  int gewicht;
}

ik heb in mijn programma dan een CObArray welke gevuld is met pointers naar instanties van aap en neushoorn. in de Document classe gebruik ik deze code voor het toevoegen van een dier aan de array en het opslaan van het document:
C++:
1
2
3
4
5
6
7
8
void CDierentuin::AddDier(CDier* dier){
  aDieren.Add(dier);
  dieren++;
}

void CDierentuin::Serialize(CArchive& ar){
  aDieren.Serialize(ar);
}

Probleem is, dat nu wel de serialize functie van "CDier" aangeroepen wordt, maar niet van aap en neushoorn. Onderstaand is de functie die ik nu gebruik. Kan iemand me vertellen wat ik moet veranderen?
C++:
1
2
3
4
5
6
7
8
9
10
11
12
void CDier::Serialize(CArchive &ar){
  CObject::Serialize(ar);
  if (ar.IsStoring()){
    ar <<(int)soortDier;
    ar <<leeftijd;
    ar <<kleurOgen;
  }else{
    ar >>soortDier;
    ar >>leeftijd;
    ar >>kleurOgen;
  }
}

Ik zeg maar zo, ik zeg maar nix. dan zeg ik al veel te veel.


  • The End
  • Registratie: Maart 2000
  • Laatst online: 18:51

The End

!Beginning

Aap en neushoorn moeten beide de functie 'virtual void Serialize(CArchive &ar);' overerven.
Van neushoorn wordt het dan zoiets:
code:
1
2
3
4
5
6
7
8
void neushoorn::Serialize(CArchive &ar){ 
  CDier::Serialize(ar); 
  if (ar.IsStoring()){ 
    ar <<gewicht; 
  }else{ 
    ar >>gewicht; 
  } 
}

  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
het werkt :)
Ik had zoiets al eerder geprobeerd, maar daarbij werkte het niet. Wat ik verkeerd had, was de regel bovenin de code:
IMPLEMENT_SERIAL(neushoorn, CDier, 1)
ipv
IMPLEMENT_SERIAL(neushoorn, CObject, 1)

thnx!

Ik zeg maar zo, ik zeg maar nix. dan zeg ik al veel te veel.