c++ OOP probleem

Pagina: 1
Acties:

  • McFreak
  • Registratie: December 2000
  • Laatst online: 27-04 21:09

McFreak

McFraGG de gekste !!

Topicstarter
[huiswerk]
http://home.hetnet.nl/~freakangel/c++.rar

Ik ben voor het eerst bezig met c++ proggie, maar ik kom er gewoon echt niet uit, UTFS gebruikt.

Als ik in de mainfile de comment weghaal van de MPVMobile dan zegt ie dat ik een class redefinieer ??
ik snap het niet helemaal, kan iemand mij een duw in de goede richting geven aub ?

Ik heb hiero het boek van bjarne stroustrup, the c++ language in het engels en hiermee kom ik er echt niet uit ..

McFraGG de gekste !!


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Je hebt een grotere kans dat mensen ernaar gaan kijken als je de .cpp en .h even online zet ipv een .rar bestand/

  • McFreak
  • Registratie: December 2000
  • Laatst online: 27-04 21:09

McFreak

McFraGG de gekste !!

Topicstarter
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
// ----------------mainfile.cpp-------------
#include <stdlib.h>
#include <string>
#include "Stationwagonmobile.cpp"
//#include "MPVMobile.cpp"     <-- als ik hier de comment weghaal, doet ie het niet meer , wat te doen ??
//#include "Hatchbackmobile.cpp"
using namespace std;

int main()
{
 Stationwagonmobile Stationwagonmobile;
 //MPVMobile MPVMobile       <-- idem


 
 cout <<"\n\n\n";
 system("pause");
}

// ----------------------Stationwagonmobile.cpp --------------
#include "auto.cpp"
class Stationwagonmobile : public Auto
{
public:
Stationwagonmobile();
~Stationwagonmobile();  
}; 

Stationwagonmobile::Stationwagonmobile()
{
cout << "\nEr is een Stationwagonmobile ..";
}

Stationwagonmobile::~Stationwagonmobile()
{
cout << "\nEr is geen Stationwagonmobile meer ..";
}

// -----------------------auto.cpp ---------------------
#include <string>
#include "voertuig.cpp"
#include "statusymbool.cpp"
#include "transportsoort.cpp"
#include <iostream>



class Auto : public Voertuig, public Statusymbool, public Transportsoort
{
  public:
  Auto();
  Auto (int lengte, int breedte, int hoogte, int deuren, string merk, int motor);
  ~Auto();
    int GetAantalDeuren ();
    int GetLengte ();
    int GetBreedte ();
    int GetHoogte ();
    string GetMerk ();
    int GetMotor ();

  
  protected:  
    void SetAantalDeuren (int aantaldeuren);
    void SetLengte (int lengte);
    void SetBreedte (int breedte);
    void SetHoogte (int hoogte);
    void SetMerk (string merk);
    void SetMotor (int motor);  

  private:  
    int aantaldeuren;
    int lengte;
    int breedte;
    int hoogte;
    string merk;
    int motor;

};


Auto::Auto()
{
cout<<"\nEr is een Auto ..";
}

Auto::~Auto(){}

int Auto::GetAantalDeuren ()
{
return aantaldeuren;
}

void Auto::SetAantalDeuren (int d)
{
aantaldeuren=d;
cout << "\nAantal deuren:\t"<<aantaldeuren;
}

int Auto::GetLengte ()
{
return lengte;
}

void Auto::SetLengte (int l)
{
lengte=l;
cout << "\nLengte:\t"<<lengte;
}

int Auto::GetBreedte ()
{
return breedte;
}

void Auto::SetBreedte (int b)
{
breedte=b;
cout << "\nBreedte:\t"<<breedte;
}

int Auto::GetHoogte ()
{
return hoogte;
}

void Auto::SetHoogte (int h)
{
hoogte=h;
cout << "\nHoogte:\t"<<hoogte;
}

string Auto::GetMerk ()
{
return merk;
}

void Auto::SetMerk (string m)
{
merk=m;
cout << "\nMerknaam:\t"<<merk;
}

int Auto::GetMotor ()
{
return motor;
}

void Auto::SetMotor (int m)
{
motor=m;
cout << "\nMotor:\t"<<motor;
}

// ---------------------voertuig.cpp -----------------
#include <string>
class Voertuig
{
public:
Voertuig() ;
~Voertuig();
void rijden();
void stoppen();
};

Voertuig::Voertuig()
{
cout << "\nEr is een Voertuig ..";
}

Voertuig::~Voertuig()
{
}

void Voertuig::rijden ()
{
cout << "\nvoertuig rijdt ";
}

void Voertuig::stoppen ()
{
cout << "\nvoertuig is gestopt";
}

Veel te veel tekst vandaar die rar..
anyway, als ik de comments in de mainfile voor de include MPVMobile weghaal begint DEV-C++ 4.01 te zeiken over een redefinition van voertuig..

McFraGG de gekste !!


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
je moet je klassen eerst in een .h bestand declareren.
code:
1
2
3
4
5
6
7
8
9
10
11
class MPVMobile : public Auto
{
public:
     MPVMobile();
     ~MPVMobile();
     int GetPersons();    

private:
      int persons;
      void SetPersons(int);    
};

dat gedeelte moet je dus in een .h file zetten, en dan moet er nog wat code omheen:
code:
1
2
3
4
5
6
#ifndef _MPVMobile_h_
#define _MPVMobile_h_

(hier je zooi)

#endif

die .h include je vervolgens, ipv de .cpp

bovenaan mpvmobile.cpp moet je em ook includen.

zelfde met de andere cpp files.

  • McFreak
  • Registratie: December 2000
  • Laatst online: 27-04 21:09

McFreak

McFraGG de gekste !!

Topicstarter
ok ga ik proberen...tnx

McFraGG de gekste !!


  • McFreak
  • Registratie: December 2000
  • Laatst online: 27-04 21:09

McFreak

McFraGG de gekste !!

Topicstarter
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
//-------------------------------------mainfile.cpp
#include <stdlib.h>
#include <string>
#include "Stationwagonmobile.h"
#include "MPVMobile.h"  
using namespace std;

int main()
{
 Stationwagonmobile stationwagonmobile;
 MPVMobile mpvmobile;
 
 cout <<"\n\n\n";
 system("pause");

}



//---------------------------------MPVmobile.h
#ifndef _MPVMobile_h_
#define _MPVMobile_h_

#include "auto.h"
#include <string>

class MPVMobile : public Auto
{
public:
     MPVMobile();
     ~MPVMobile();
     int GetPersons();  

private:
    int persons;
    void SetPersons(int);    
};

#endif
}



//------------------------------MPVmobile.cpp
#include "auto.cpp"
#include <string>

class MPVMobile : public Auto
{
public:
     MPVMobile();
     ~MPVMobile();
     int GetPersons();  

private:
    int persons;
    void SetPersons(int);    
};

MPVMobile::MPVMobile()
{
cout << "\nEr is een MPVMobile ..";
SetAantalDeuren(6);
SetLengte(10);
SetBreedte(3);
SetHoogte(2);
SetMerk("Grover");
SetMotor(4000);
SetPersons(10);
}


MPVMobile::~MPVMobile()
{
cout << "\nEr was een MPVMobile .. ";
}

int MPVMobile::GetPersons()
{
return persons;
}

void MPVMobile::SetPersons(int p)
{
persons=p;
cout << "\nAantal personen:\t"<<persons;
}




//----------------------------------------------auto.h
#include <string>
#include "voertuig.cpp"
#include "statusymbool.cpp"
#include "transportsoort.cpp"
#include <iostream>



class Auto : public Voertuig, public Statusymbool, public Transportsoort
{
  public:
  Auto();
  Auto (int lengte, int breedte, int hoogte, int deuren, string merk, int motor);
  ~Auto();
    int GetAantalDeuren ();
    int GetLengte ();
    int GetBreedte ();
    int GetHoogte ();
    string GetMerk ();
    int GetMotor ();

  
  protected:  
    void SetAantalDeuren (int aantaldeuren);
    void SetLengte (int lengte);
    void SetBreedte (int breedte);
    void SetHoogte (int hoogte);
    void SetMerk (string merk);
    void SetMotor (int motor);

  

  private:
    
    int aantaldeuren;
    int lengte;
    int breedte;
    int hoogte;
    string merk;
    int motor;

};

//-------------------------------------auto.cpp
#include "auto.h"


Auto::Auto()
{
cout<<"\nEr is een Auto ..";
}

Auto::~Auto(){}

int Auto::GetAantalDeuren ()
{
return aantaldeuren;
}

void Auto::SetAantalDeuren (int d)
{
aantaldeuren=d;
cout << "\nAantal deuren:\t"<<aantaldeuren;
}

int Auto::GetLengte ()
{
return lengte;
}

void Auto::SetLengte (int l)
{
lengte=l;
cout << "\nLengte:\t"<<lengte;
}

int Auto::GetBreedte ()
{
return breedte;
}

void Auto::SetBreedte (int b)
{
breedte=b;
cout << "\nBreedte:\t"<<breedte;
}

int Auto::GetHoogte ()
{
return hoogte;
}

void Auto::SetHoogte (int h)
{
hoogte=h;
cout << "\nHoogte:\t"<<hoogte;
}

string Auto::GetMerk ()
{
return merk;
}

void Auto::SetMerk (string m)
{
merk=m;
cout << "\nMerknaam:\t"<<merk;
}

int Auto::GetMotor ()
{
return motor;
}

void Auto::SetMotor (int m)
{
motor=m;
cout << "\nMotor:\t"<<motor;
}

Ik heb alles nu verandert maar hij zegt mooi precies hetzelfde..
Fucking redefinition, moet ik misschien met pointers enzo werken.. dat hoeft toch eigenlijk niet perse ?

McFraGG de gekste !!


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Gooi alle code die werkt er eens uit... :Z
code:
1
2
Stationwagonmobile stationwagonmobile;
MPVMobile mpvmobile;

Dit is niet zo slim. Normaalgesproken doe je zoiets:

StationWagonMobile* aCar;
MPVMobile* aNotherCar;

Waarna je ze aanmaakt met:

aCar = new StationWagonMobile;

etc...

Dezelfde naam gebruiken voor de class en een instance is niet handig, zelfs niet als ze qua case verschillen.

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
code:
1
2
3
4
5
6
7
8
9
10
11
class MPVMobile : public Auto
{
public:
     MPVMobile();
     ~MPVMobile();
     int GetPersons();    

private:
      int persons;
      void SetPersons(int);    
};

Dit gedeelte moet weg uit MPVMobile.cpp
en daar moet je een include voor in de plaats zetten.
Bij auto doe je het op het eerste gezicht wel goed.

edit:
en bij de #include moet "auto.cpp", "auto.h" worden.
Hij mag denk ik ook helemaal weggelaten worden, omdat hij ook in MPVMobile.h geinclude wordt.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op maandag 14 januari 2002 17:40 schreef Poohbear het volgende:
Dit is niet zo slim. Normaalgesproken doe je zoiets:
Is niks mis mee hoor. Hoef je niet met pointers te werken, kan je niet vergeten het geheugen op te ruimen. Dynamisch alloceren is handig bij grote of van tevoren onbekende aantallen objecten.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op maandag 14 januari 2002 17:49 schreef Orphix het volgende:

[..]

Is niks mis mee hoor. Hoef je niet met pointers te werken, kan je niet vergeten het geheugen op te ruimen. Dynamisch alloceren is handig bij grote of van tevoren onbekende aantallen objecten.
ik denk dat ie doelde op het feit dat ze dezelfde naam hadden (alleen andere case), en niet dat ie geen pointers gebruikt :)

(PS: ik werkt zelf zo min mogelijk met pointers, en ik vind het jammer dat je in java geen objecten op de stack kunt aanmaken :) en ja ik weet dat dat nogal moeilijk gaat met de manier waarop java in elkaar zit :P)

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.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op maandag 14 januari 2002 17:40 schreef Poohbear het volgende:
Gooi alle code die werkt er eens uit... :Z
code:
1
2
Stationwagonmobile stationwagonmobile;
MPVMobile mpvmobile;

Dit is niet zo slim. Normaalgesproken doe je zoiets:

StationWagonMobile* aCar;
MPVMobile* aNotherCar;

Waarna je ze aanmaakt met:

aCar = new StationWagonMobile;
"niet zo slim". Waarom denk je dat?

Ik weet de volgende redenen waarom je het NIET moet doen:
* Memory leaks mogelijk
* new kan exception geven - en wat moet je dan?
* inefficient - stack geheugen is sneller (cached)

Maar ik zou iets kunnen missen ?

edit:

Misschien dubbelop, maar ik miste in 't andere commentaar de redenen waarom de stack beter is

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

Niet beter, maar ook niet slechter maar in sommige situaties handiger:
code:
1
2
3
4
5
6
int main(){
  Object mijnObject;

  mijnObject.setup();
  return mijnObject.run();
}

  • Orphix
  • Registratie: Februari 2000
  • Niet online
vicz, wat probeer je nu te zeggen :?
Dat objecten op de stack declararen beter is dan op de heap? Of vind je beide methodes 'evengoed'?

(Ik snap niet helemaal de bedoeling van je stukje code)

  • McFreak
  • Registratie: December 2000
  • Laatst online: 27-04 21:09

McFreak

McFraGG de gekste !!

Topicstarter
gaste ik kom er niet uit..
ik wil ff het onmogelijke vragen..
Wie kan deze zooi, http://home.hetnet.nl/~freakangel/c++.rar, ff door zijn compiler jagen en mij vertellen wat ik fout doe?

Hij blijft zeggen dat er een redefinition van voertuig is zodra ik
code:
1
#include MPVMobile

en
code:
1
#include Stationwagonmobile

allebei in mijn mainfile zet..
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdlib.h>
#include <string>
           
#include "Stationwagonmobile.cpp"
//#include "MPVMobile.h" 
using namespace std;

int main()
{
 Stationwagonmobile stationwagonmobile;
 //MPVMobile *mpvmobile;     
 cout <<"\n\n\n";
 system("pause");
}

McFraGG de gekste !!


  • Orphix
  • Registratie: Februari 2000
  • Niet online
RaR, over al je bestanden mag maar op 1 plek de declaratie staan van een class. Deze staat vrijwel altijd in een header bestand.
Check dus goed in alle bestanden of je op meerdere plekken dezelfde class beschrijft.

Dit:
code:
1
2
3
4
5
6
7
8
9
header1.h:
class Auto { ... };
header2.h:
class Auto { ... };
program.cpp:
#include "header1.h"
#include "header2.h"

Auto mijnAuto;

is dus fout.

  • McFreak
  • Registratie: December 2000
  • Laatst online: 27-04 21:09

McFreak

McFraGG de gekste !!

Topicstarter
hmm..

McFraGG de gekste !!


Verwijderd

Op maandag 14 januari 2002 23:23 schreef Orphix het volgende:
vicz, wat probeer je nu te zeggen :?
Dat objecten op de stack declararen beter is dan op de heap? Of vind je beide methodes 'evengoed'?

(Ik snap niet helemaal de bedoeling van je stukje code)
Beide evengoed... bij de een moet je wat beter opletten...
met de code bedoelde ik dat het soms wat compacter is als je het op de stack gooit.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op maandag 14 januari 2002 23:57 schreef vicz het volgende:
Beide evengoed... bij de een moet je wat beter opletten...
met de code bedoelde ik dat het soms wat compacter is als je het op de stack gooit.
MSalters heeft 3 punten genoemd waarom op de stack beter is (en waar ik het mee eens ben), nu noem jij nog een voordeel. Heb je ook argumenten om het tegenovergestelde te bewijzen?

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
als in een aantal headerbestanden dit zet:
code:
1
2
3
#include <iostream>
#include <string>
using namespace std;

gaat het al een stuk beter.

* Sjaaky is zo stom geweest om alles te downloaden en uit te vogelen, inmiddels werkt het wel.

Verwijderd

Op dinsdag 15 januari 2002 00:13 schreef Orphix het volgende:

[..]
MSalters heeft 3 punten genoemd waarom op de stack beter is (en waar ik het mee eens ben), nu noem jij nog een voordeel.
Ik zie alleen een lijst waarom de heap niet beter is...

de stack
- meestal sneller
- Makkelijker voor de programmeur... automatisch cleanup
Natuurlijk kan je nog steeds problemen krijgen met pointers naar die objecten. Het object is al weg, maar je zit zelf er nog mee te spelen.

extreem voorbeeld...

void getAddress(void * add) {
Object mijnObject;
add = &mijnObject;
}

de heap
- flexibeler...
- volgens mij wordt dit erg expensive:
code:
1
2
3
4
void func(){
  Object mijnObject();
  func();
}

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op dinsdag 15 januari 2002 01:40 schreef vicz het volgende:
- volgens mij wordt dit erg expensive:
code:
1
2
3
4
void func(){
  Object mijnObject();
  func();
}
dit wordt nog meer expensive:
code:
1
2
3
4
5
void func()
{
    Object * mijnObject = new Object();
    func();
}

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 15-09 22:39
- declareer je classes in een headerbestand
- definieer je classes in een cpp bestand
- do not include cpp bestanden in je source
- include cpp bestanden in je makefile/projectfile whatever..

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.

Pagina: 1