Op vrijdag 07 juni 2002 20:44 schreef mbravenboer het volgende:
Netjes hoor

.
Overigens kan ik mezelf niet meer heugen dat ik een switch gebruikt heb in Java, het is ook een bekende bad-smell dus kennelijk stinkt mijn code in ieder geval op dit punt niet

.
Zie over die stinkende switch ook hier:
[topic=515335/1/25]
De stinkende switch. Ik ga even grabbelen in wat C++ code waarin ik bijna alleen maar met switches gewerkt heb

want daarbij kon ik met niet voorstellen hoe dat in een nette klasse kon
Deze classe Parste de binaire boom die hem gegeven werd vanaf elk punt in de code. Ik heb alleen even 2 functies gegeven switches bevatten.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| //---------------------------------------------------------------------------
#ifndef CharTreeParserH
#define CharTreeParserH
#include "bintree.h"
//---------------------------------------------------------------------------
namespace glimi_john_van_schie_HvA {
class CharTreeParser {
private:
const static int NODE_LEAF = 0;
const static int NODE_LEFT_ONLY = 1;
const static int NODE_RIGHT_ONLY= 2;
const static int NODE_BOTH = 3;
unsigned int getNodeStatus( main_savitch_10::binary_tree_node<char> *theRoot );
unsigned int giveDepth( main_savitch_10::binary_tree_node<char> *theRoot )
//Even de public niet nuttige functies eruitgesloopt
};
}
#endif |
Na de header de CPP. Hierin zie je dat een binary_tree_node template wordt gebruikt. Wees niet bang, deze werd aangeleverd door school (alleen die naam al

)
Commentaar staat bij de functies
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
| //---------------------------------------------------------------------------
#pragma hdrstop
#include "CharTreeParser.h"
using namespace glimi_john_van_schie_HvA;
using namespace std;
using namespace main_savitch_10; //needed for binary_tree_node template
//---------------------------------------------------------------------------
#pragma package(smart_init)
/*
* Beschrijving: Deze functie krijgt een binaire boom node mee en kijkt hoeveel kinderen
* deze heeft
* Input: een binaire_tree_node met maximaal 2 childs.
* Output: Een waarde die de childstatus van de node aangeeft. Deze status is een
* van de vier volgenden CharTreeParser::NODE_LEAF, CharTreeParser::NODE_LEFT_ONLY
* CharTreeParser::NODE_RIGHT_ONLY of CharTreeParser::NODE_BOTH
*/
unsigned int CharTreeParser::getNodeStatus( binary_tree_node<char> *theRoot ){
int returnStatus = NODE_LEAF;
if( theRoot->left() != NULL ){
returnStatus += NODE_LEFT_ONLY;
}
if( theRoot->right() != NULL ){
returnStatus += NODE_RIGHT_ONLY;
}
return returnStatus;
}
/*
* Beschrijving: Deze functie berekend recursief de diepte van de boom
* Input: een binaire_tree_node met maximaal 2 childs. Vanaf deze node wordt de diepte
* berekend
* Output: de diepte
*/
unsigned int CharTreeParser::giveDepth( binary_tree_node<char> *theRoot ) {
unsigned int returnValue = 1;
int leftvalue = 0;
int rightvalue = 0;
//bekijk hoeveel kinderen de node heeft
switch( getNodeStatus( theRoot ) ){
case NODE_LEAF:
return 0;
case NODE_LEFT_ONLY:
//roep deze functie aan met het linker kind als parameter
leftvalue = giveDepth( theRoot->left() );
break;
case NODE_RIGHT_ONLY:
//roep deze functie aan met het rechter kind als parameter
rightvalue = giveDepth( theRoot->right() );
break;
case NODE_BOTH:
//access deze 2x voor zowel het linker als het rechter kind
leftvalue = giveDepth( theRoot->left() );
rightvalue = giveDepth( theRoot->right() );
break;
} //end switch
//tel de grootste diepte vanaf deze node op bij de returnValue en return dit getal weer
return returnValue + max( leftvalue, rightvalue );
} |
Hmmmz nu ik het zo zie, bespeur ik ook enkele fouten , zoals een return in de switch, een niet consequente constante benoeming en een niet const pointer variabele als parameter

Echter daar gaat het even niet helemaal om, maar hoe zet je dit in verschillende classes. Ik zie dat verschil niet helemaal duidelijk namelijk en dat moet het wel zijn