[C++] Simpel overerving voorbeeld

Pagina: 1
Acties:

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Aangezien de search niet werkt (ja, dat weet iedereen al, niet met stenen gooien :)) en ik echt wanhopig begin te worden post ik de vraag hier toch maar. Ik ben bezig om voor volgend jaar, waarin ik de programmeervakken moet herkansen (nee, ik snap 't echt niet) alles door te nemen en alle opdrachten te maken.

Nou wil ik data van de ene klasse naar de andere krijgen. Dat wilde niet werken. Ik heb volgens een voorbeeld wat ik hier heb wat code geschreven en het wil echt niet werken. Ik krijg geen foutmeldingen, maar de integer waarvan ik de waarde wil hebben geeft alleen maar '1' aan. Hier is de code die ik gemaakt heb als simpele test met het idee 'als dit werkt kom ik er wel uit'... helaas... het werkt dus niet.

code:
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
#include <vcl.h>
#include <iostream.h>

class Hoofdklasse{
protected:
        int integer1;
public:
        void hoofd();
};

void Hoofdklasse::hoofd(){
        integer1=10;
}

class Subklasse : Hoofdklasse{
private:
        int integer2;
public:
        void sub();
};

void Subklasse::sub(){
        integer2=20;
        cout<<"Integer 1: "<<integer1<<endl;
        cout<<"Integer 2: "<<integer2<<endl;
        cout<<"Totaal: "<<(integer1+integer2)<<endl;
        cin.get();
}

void main(){
        Hoofdklasse hoofdklasse;
        hoofdklasse.hoofd();
        Subklasse subklasse;
        subklasse.sub();
}


Het zal ongetwijfeld iets heel simpels/stupides zijn, maar ik zit me er helemaal blind op te staren :? Bij voorbaat dank voor de hulp.

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Verwijderd

Ratch schreef op 05 augustus 2002 @ 20:45:
Aangezien de search niet werkt (ja, dat weet iedereen al, niet met stenen gooien :)) en ik echt wanhopig begin te worden post ik de vraag hier toch maar. Ik ben bezig om voor volgend jaar, waarin ik de programmeervakken moet herkansen (nee, ik snap 't echt niet) alles door te nemen en alle opdrachten te maken.

Nou wil ik data van de ene klasse naar de andere krijgen. Dat wilde niet werken. Ik heb volgens een voorbeeld wat ik hier heb wat code geschreven en het wil echt niet werken. Ik krijg geen foutmeldingen, maar de integer waarvan ik de waarde wil hebben geeft alleen maar '1' aan. Hier is de code die ik gemaakt heb als simpele test met het idee 'als dit werkt kom ik er wel uit'... helaas... het werkt dus niet.

code:
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
#include <vcl.h>
#include <iostream.h>

class Hoofdklasse{
protected:
        int integer1;
public:
        void hoofd();
};

void Hoofdklasse::hoofd(){
        integer1=10;
}

class Subklasse : Hoofdklasse{
private:
        int integer2;
public:
        void sub();
};

void Subklasse::sub(){
        integer2=20;
        cout<<"Integer 1: "<<integer1<<endl;
        cout<<"Integer 2: "<<integer2<<endl;
        cout<<"Totaal: "<<(integer1+integer2)<<endl;
        cin.get();
}

void main(){
        Hoofdklasse hoofdklasse;
        hoofdklasse.hoofd();
        Subklasse subklasse;
        subklasse.sub();
}


Het zal ongetwijfeld iets heel simpels/stupides zijn, maar ik zit me er helemaal blind op te staren :? Bij voorbaat dank voor de hulp.
Probeer eens dit:
code:
1
class Subklasse : public Hoofdklasse{

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:00
Heb je al eens gedebugged?

Je zegt dat hij alleen maar 1 als output heeft, maar hij moet eigenlijk:
code:
1
2
3
10
20
30

Als output geven. Vanwaar haal jij dan die 1?

Wat CArNi4 zegt, is natuurlijk ook waar. Je moet specifieren of je private of public overerft van de base-class, maar ik vind het wel vreemd dat de compiler geen errors geeft als je dat niet doet.

https://fgheysels.github.io/


Verwijderd

whoami schreef op 05 augustus 2002 @ 20:48:
Wat CArNi4 zegt, is natuurlijk ook waar. Je moet specifieren of je private of public overerft van de base-class, maar ik vind het wel vreemd dat de compiler geen errors geeft als je dat niet doet.
Dan heb ik dat hoofdstuk van m'n boek dus begrepen :).

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je maakt twee aparte objecten aan. Dan werkt het natuurlijk niet... (hoofd() is nl. geen constructor)

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:00
Hmmzz.... Dat is ook weer waar.

Je maakt een object van uw afgeleide class, maar de data-member van uw hoofdklasse wordt nergens geinitialiseerd.

https://fgheysels.github.io/


  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Whoops idd... dat public moet er wel bij :)
Maar helaas helpt het niets. Ik krijg overigens niet eens een warning, laat staan een error. Ik gebruik Borland C++ Builder 6 die nog nooit echt problemen heeft gegeven van dergelijke aard. Daarom vermoed ik (en weet bijna zeker) dat het aan de coding ligt.

Whoami heeft gelijk.. ik moet 10,20 en 30 krijgen... toch zie ik 1,20,21 :(
Dit krijg ik te zien:
Afbeeldingslocatie: http://members.ams.chello.nl/e.venema4/images/overerven.jpg

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Verwijderd

Probeer deze eens dan:
code:
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
37
38
39
40
41
42
43
44
45
#include <vcl.h>
#include <iostream.h>

class Hoofdklasse{
protected:
        int integer1;
public:
        void hoofd();
        Hoofdklasse( int intje = 10 ); // default constructor
};

void Hoofdklasse::hoofd(){
        integer1=10;
}

Hoofdklasse::Hoofdklasse( int intje ) {
        integer1 = 10;
}

class Subklasse : public Hoofdklasse{
private:
        int integer2;
public:
        Subklasse( int intje2 = 20 ); // default constructor
        void sub();
};

Subklasse::Subklasse( int intje2 ) {
        integer2 = 20;
}

void Subklasse::sub(){
        integer2=20;
        cout<<"Integer 1: "<<integer1<<endl;
        cout<<"Integer 2: "<<integer2<<endl;
        cout<<"Totaal: "<<(integer1+integer2)<<endl;
        cin.get();
}

void main(){
        Hoofdklasse hoofdklasse;
        hoofdklasse.hoofd();
        Subklasse subklasse;
        subklasse.sub();
}

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Woei! Dat werkt :P
Dan rest mij nu alleen nog de vraag WAAROM werkt het nu wel. Ik ben blij dat ik hiermee aan de slag kan, maar ik zou ook graag willen weten waarom dit wel werkt en mijn versie niet. Ik zie de constructoren, maar op welke manier zorgen die ervoor dat de integer1 nu ineens wel beschikbaar is in Subklasse? Als ik dat weet snap ik het misschien ook :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Verwijderd

Ratch schreef op 05 augustus 2002 @ 21:03:
Woei! Dat werkt :P
Dan rest mij nu alleen nog de vraag WAAROM werkt het nu wel. Ik ben blij dat ik hiermee aan de slag kan, maar ik zou ook graag willen weten waarom dit wel werkt en mijn versie niet. Ik zie de constructoren, maar op welke manier zorgen die ervoor dat de integer1 nu ineens wel beschikbaar is in Subklasse? Als ik dat weet snap ik het misschien ook :)
Nou, ik heb dus constructoren toegevoegd, en die worden uitgevoerd wanneer je een object maakt van een type, en daarin krijgen die variabelen al een waarde.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ratch het antwoord was al iets van 5 posts geleden gegeven...Maakt niet uit hoor, maar misschien ff het hele topic lezen? :)

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Ik heb alles gelezen hoor Zoijar, ook jouw post. Alleen is mijn kennis van C++ niet van een dergelijke aard om daarmee meteen te snappen wat je bedoelt en hoe ik dat op kan lossen. Jouw post was wel de eerste die iets zei over de structuur van het programmeerwerk, maar ik moet niet voor niets het vak herkansen :) -Iedereen bedankt voor de hulp.. ik ga er weer helemaal uitkomen.

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Verwijderd

Je moet ook Subklasse.hoofd() aanroepen om die integer1 een waarde te laten geven. Met de Hoofdklasse zelf doe je totaal niks.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ratch schreef op 05 augustus 2002 @ 21:11:
Ik heb alles gelezen hoor Zoijar, ook jouw post. Alleen is mijn kennis van C++ niet van een dergelijke aard om daarmee meteen te snappen wat je bedoelt en hoe ik dat op kan lossen. Jouw post was wel de eerste die iets zei over de structuur van het programmeerwerk, maar ik moet niet voor niets het vak herkansen :) -Iedereen bedankt voor de hulp.. ik ga er weer helemaal uitkomen.
Bedoelde het niet als flame hoor :)

Anyway, zou het wel nog ff goed doorkijken zoadat je het ook echt begrijpt. Als je deze code namelijk bij mij in zou leveren zou het een heeeeel mager 5.5je worden :P

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Daar zou ik allang heel blij mee zijn :P jaa, een kinderhand is gauw gevuld :)
Maar ik ben het inderdaad heel goed aan het doornemen om precies te snappen hoe het nu precies zit. Ik ga overerven nog meer nodig hebben voor andere opdrachten en om nou voor elke opdracht hier weer een post te doen is misschien ietwat teveel van het goede :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
.

[ Voor 100% gewijzigd door Glimi op 11-10-2003 12:33 ]


  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Hey Glim, ik vind 't tof dat je zoveel code tikt, maar denk je serieus dat ik die ga snappen? Je kent m'n programmeerkunsten... ik ben weer helemaal bij het begin van de OP vakken, dus de bovenstaande code ziet er voor mij heel indrukwekkend uit, maar ik kan er niks mee ... jah C&P ;)

Als je wilt weten waar ik dan in godesnaam mee bezig ben voor opdracht... de allereerste.. met die bakkers :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.

Pagina: 1