Sowieso ben ik het niet eens met de coding style: Vermijd altijd protected variabeles Ratch! Zo laat je ze open voor andere (overervende classes). Zorg ervoor dat je eigen class voldoende interface bied zodat uwer class gewoon op zichzelf zal werken.
Houd er ook rekening mee dat de bewerkingen die je op het object hoofdclasse doet, niet de data in subklasse beinvloeden ( het voorbeeld van hierboven slaat dan ook niet echt ergens op imho ) Hier geeft men de boel alleen een constructor, terwijl jij denkt dat een bewerking (hoofd() ) op het object hoofdklasse een effect gaat hebben op subklasse!
Code zegt meer dan een hele preek
Main.cpp
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
| #pragma hdrstop
#include <condefs>
#include <iostream>
using namespace std;
#include "Hoofdclass.h"
#include "SubKlasse.h"
//---------------------------------------------------------------------------
USEUNIT("Hoofdclass.cpp");
USEUNIT("SubKlasse.cpp");
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
Hoofdclass h10; //Deze bevat 10
SubKlasse s30( 30 ); //Deze bevat 30
// Dit geeft 10
//
cout << h10.getInteger1( ) << endl;
// Dit geeft 50
//
h10.setInteger1( 50 );
cout << h10.getInteger1( ) << endl;
// Dit zal nu nog steeds gewoon 10 geven!
// Omdat we geen methode op het object
// los gelaten hebben waar s30 van erft
//
cout << s30.getInteger1( ) << endl;
// En dit gewoon 30! Het getal waarmee
// het geinitialiseerd is
//
cout << s30.getInteger2( ) << endl;
cin.get();
return 0;
} |
Hoofdclass
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
| //---------------------------------------------------------------------------
#ifndef HoofdclassH
#define HoofdclassH
//---------------------------------------------------------------------------
class Hoofdclass {
private:
int _integer1;
public:
//Static variable
//
static const int DEFAULT_VALUE = 10;
// Constructor
//
Hoofdclass( int int1 = DEFAULT_VALUE );
//Interface (gets en sets)
//
void setInteger1( int int1 );
int getInteger1( );
};
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include "Hoofdclass.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
Hoofdclass::Hoofdclass( int int1 ) {
setInteger1( int1 );
}
void Hoofdclass::setInteger1( int int1 ) {
// Hier nog boeiende controles
//
_integer1 = int1;
}
int Hoofdclass::getInteger1( ) {
return _integer1;
} |
SubKlasse
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
| //---------------------------------------------------------------------------
#ifndef SubKlasseH
#define SubKlasseH
#include "Hoofdclass.h"
//---------------------------------------------------------------------------
class SubKlasse : public Hoofdclass {
private:
int _integer2;
public:
SubKlasse( int int2 );
void setInteger2( int int2 );
int getInteger2( );
};
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include "SubKlasse.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
SubKlasse::SubKlasse( int int2 ) {
setInteger2( int2 );
}
void SubKlasse::setInteger2( int int2 ) {
// Bla check
//
_integer2 = int2;
}
int SubKlasse::getInteger2( ) {
return _integer2;
} |
edit:
Nu geen gezeik dus, gewoon te editten
[
Voor 0% gewijzigd door
Glimi op 13-08-2002 21:49
. Reden: Hmmz ]