Ik zal eerst proberen uit te leggen wat ik heb en wil:
Ik heb:
- een MFC MDI applicatie
- 3 klasses: CVoorraad, CPartij en CItem
Ik wil in een tekstfile de 3 klasses wegschrijven, dmv. de 3 klasses te serialiseren.
Ik zal nu proberen uit te leggen hoe de samenhang van de 3 klasses in mijn applicatie is:
- CVoorraad bevat een vector met alle Partijen die in de voorraad aanwezig zijn.
- CPartij bevat een attribuut dat van het type CItem is
- CItem is niks meer van een omschrijving van de items waaruit EEN partije bestaat
- CVoorraad bevat een vector met alle Items
De header files van de 3 klasses zien er als volgt uit:
CVoorraad:
CPartij
CItem
Ik weet hoe men doet serialiseren in MFC, maar ik weet niet hoe ik moet serialiseren als bijvoorbeeld de klasse CPartij een attribuut bevat van het type CItem.
Hier ligt dus ook mijn probleem, want in mijn applicate is dat dus het geval.
Zoals men kan zien in de header file van CPartij, bevat die een attribuut van het type CItem, namelijk m_PartijOmschrijving. Deze moet ook geserialiseerd worden, maar volgens mij gaat dat niet op de volgende manier:
Hoe zou dit wel moeten/kunnen?
Dan heb ik nog een vraag, namelijk:
Ik heb 2 vectoren, EEN voor de Partijen en EEN voor de Items, beide vectoren moeten in EEN tekstbestand komen. Het wegschrijven is niet zo moeilijk, maar het trug halen (deserialiseren) is wat lastiger. Want hoe weet ik nu of ik een Item aan het deserialiseren ben of een Partij!?
Ik hoop dat mijn probleem een beetje helder is zo, en dat men mij op weg kan helpen?
Ik heb:
- een MFC MDI applicatie
- 3 klasses: CVoorraad, CPartij en CItem
Ik wil in een tekstfile de 3 klasses wegschrijven, dmv. de 3 klasses te serialiseren.
Ik zal nu proberen uit te leggen hoe de samenhang van de 3 klasses in mijn applicatie is:
- CVoorraad bevat een vector met alle Partijen die in de voorraad aanwezig zijn.
- CPartij bevat een attribuut dat van het type CItem is
- CItem is niks meer van een omschrijving van de items waaruit EEN partije bestaat
- CVoorraad bevat een vector met alle Items
De header files van de 3 klasses zien er als volgt uit:
CVoorraad:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| #include "Partij.h" #include <vector> using namespace std; class CVoorraad { private: int m_Jaargang; CString m_Titel; CString m_VoorraadOmschrijving; vector<CPartij*> m_Partijen; vector<CItem*> m_Items; public: CVoorraad(CString jaar, CString titel, CString omschrijving, vector<CPartij*> *pVecPartijen, vector<CItem*> *pVecItems); virtual ~CVoorraad(); BOOL addPartij(CPartij *); BOOL delPartij(int partijID); CPartij* getPartij(int partijID); CString getJaargang(); int getAantalPartijen(); CString getTitel(); BOOL addItem(CItem *itemID); BOOL delItem(int itemID); CItem* getItem(int itemID); float berekenTotaalWaarde(); float berekenTotaalGewicht(); void Serialize(CArchive & ar); }; |
CPartij
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| #include "Item.h" class CPartij { private: int m_PartijID; CItem m_PartijOmschrijving; int m_VoorraadAantal; float m_PartijWaarde; float m_PartijGewicht; public: CPartij(); CPartij(int ID, CItem omschrijving, int aantal); virtual ~CPartij(); int getPartijID(); float getPartijWaarde(); float getPartijGewicht(); int getVoorraadAantal(); void setVoorraadAantal(int aantal); BOOL stopItemInVoorraad(); BOOL neemItemUitVoorraad(); void Serialize(CArchive & ar); }; |
CItem
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| #include <iostream> using namespace std; class CItem { private: int m_ItemID; CString m_ItemNaam; CString m_ItemOmschrijving; float m_ItemPrijs; float m_ItemGewicht; public: CItem(); CItem(int ID, CString naam, CString omschrijving, float prijs, float gewicht); virtual ~CItem(); void setItemNaam(CString naam); void setItemOmschrijving(CString omschrijving); void setItemPrijs(float prijs); void setItemGewicht(float gewicht); int getItemID(); CString getItemNaam(); CString getItemOmschrijving(); float getItemPrijs(); float getItemGewicht(); void Serialize(CArchive & ar); }; |
Ik weet hoe men doet serialiseren in MFC, maar ik weet niet hoe ik moet serialiseren als bijvoorbeeld de klasse CPartij een attribuut bevat van het type CItem.
Hier ligt dus ook mijn probleem, want in mijn applicate is dat dus het geval.
Zoals men kan zien in de header file van CPartij, bevat die een attribuut van het type CItem, namelijk m_PartijOmschrijving. Deze moet ook geserialiseerd worden, maar volgens mij gaat dat niet op de volgende manier:
C++:
1
2
3
4
5
6
7
8
| if (ar.IsStoring()) { ar << m_PartijID << m_PartijOmschrijving << m_VoorraadAantal << m_PartijGewicht << m_PartijWaarde; } else { ar >> m_PartijID >> m_PartijOmschrijving >> m_VoorraadAantal >> m_PartijGewicht >> m_PartijWaarde; } |
Hoe zou dit wel moeten/kunnen?
Dan heb ik nog een vraag, namelijk:
Ik heb 2 vectoren, EEN voor de Partijen en EEN voor de Items, beide vectoren moeten in EEN tekstbestand komen. Het wegschrijven is niet zo moeilijk, maar het trug halen (deserialiseren) is wat lastiger. Want hoe weet ik nu of ik een Item aan het deserialiseren ben of een Partij!?
Ik hoop dat mijn probleem een beetje helder is zo, en dat men mij op weg kan helpen?