Asus Mainboard - Intel Pentium III 1 GHz - 512 MB SD-RAM - 2*80 GB Maxtor HDD - Toshiba DVD 16/48 - Plextor Plexwriter 48/24/48A - Acer AL511 TFT-monitor - Standaard keyboard - Logitech MX-300 mouse
Om vaste variabelen te kunnen gebruiken, maak je gebruik van constantes of statische variabelen. Deze kunnen dus niet geïnitialiseerd worden, maar dit wordt automagisch gedaan wanneer de klasse opgevraagd wordt. In C++ is dit ook mogelijk, en zou je op deze manier kunnen doen.
Let er wel op dat statische variabelen en functies in een gedeeld geheugen staan. Wanneer deze dus worden overschreven, dan is deze variabele of functie in alle andere klassen waar dit gebruikt wordt ook overschreven.
Overigens kan ik mijzelf niet voorstellen dat je geen voorbeelden bij deze opdracht gekregen hebt.
Ik hoop dat ik een beetje duidelijk ben... En ik hoop eigenlijk ook te horen van iemand anders dat het makkelijker kan (en dan niet met globale variabelen).
Ik denk niet dat het de bedoeling is om dit zo aan te pakken.
Asus Mainboard - Intel Pentium III 1 GHz - 512 MB SD-RAM - 2*80 GB Maxtor HDD - Toshiba DVD 16/48 - Plextor Plexwriter 48/24/48A - Acer AL511 TFT-monitor - Standaard keyboard - Logitech MX-300 mouse
simpel voorbeeld:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| class foo { int bar; public: foo() : bar(0) {} void set_bar(int x) { bar = x; } int get_bar() const { return bar; } }; int main() { //stack instantie foo f; f.set_bar(0); //heap instantie foo *instance = new foo(); instance->set_bar(42); delete instance; return 0; } |
[ Voor 6% gewijzigd door MLM op 23-10-2011 21:23 ]
-niks-
Verwijderd
Waarschijnlijk definieer je je variabelen ipv ze te declareren.Thierryziezo schreef op zondag 23 oktober 2011 @ 21:13:
Toch zijn er geen voorbeelden in de aard van wat ik nodig heb:). Ik probeerde daarnet door naast de headerfile, waar ik mijn variabele declareer, ook de cpp-file te includen. Dan herkent de nieuwe klasse mijn variabele wél, maar krijg ik overal errors als "error LNK2005: "int maxCoord" (?maxCoord@@3HA) already defined in hw4_1.obj".
1
2
| extern int myVar; // declaratie. "Er bestaat een myVar van het type int" int myVar; // definitie. "Hier is myVar van het type int" |
De declaratie moet in de header staan om aan sourcefiles duidelijk te maken dat myVar bestaat en wat het type is. Maar omdat de variabele ook ergens moet leven, is een definitie ook ergens nodig, typisch in de sourcefile die correspondeert met de header. Op het moment dat je de defintie in de header zet, krijgt elke sourcefile die die header includet natuurlijk zijn eigen definitie van de variabele, wat resulteert in de link errors die je krijgt.
[ Voor 8% gewijzigd door .oisyn op 24-10-2011 23:11 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
(Of wellicht, vanwege de term 'hoofdklasse': hoe leest een afgeleide class een (private) variabele van een superclass?)
Met andere woorden, is deze opdracht niet gewoon een les in OOP, zonder static en extern en dergelijke?
Daar schuilt het probleem: het lukt me niet om die waarden uit te lezen. Ik dacht
1
| this->getDocument()->x[ i ] |
In de Doc.cpp-file heb ik dus
1
2
3
| void CtaakDoc::initPoints(){ ... } |
1
2
3
4
| public: double *x, *y; double nmPoints; |
staan, wat zou moeten volstaan om de gegevens op te roepen, dacht ik.
Hopelijk is dit wat duidelijker. Alvast bedankt!
[ Voor 7% gewijzigd door Thierryziezo op 25-10-2011 10:24 ]
Asus Mainboard - Intel Pentium III 1 GHz - 512 MB SD-RAM - 2*80 GB Maxtor HDD - Toshiba DVD 16/48 - Plextor Plexwriter 48/24/48A - Acer AL511 TFT-monitor - Standaard keyboard - Logitech MX-300 mouse
Onder solutions staan een aantal voorbeelden van de verschillende typen "coupling".
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Als je dus bij die x wilt komen, zou je kunnen doen:
1
| static_cast<CtaakDoc *>(this->GetDocument())->x[ i ] |