Re: Shared code for multiple consrtuctors
David R Tribble posted:
Java has the feature of allowing a constructor to invoke another
constructor within the same class having a different signature.
This is useful for initilializing class members without duplicating a
lot of code, and comes in handy when default function parameters
are not convenient to use.
Two ways.
1) The not-so-good way:
class Monkey {
int k;
char* r;
void CommonConstructor()
{
/* Do the common-denominator stuff in here */
}
public:
Monkey( char* arg_r ) : r(arg_r)
{
/* Do some particular stuff */
CommonConstructor();
}
Monkey( int arg_k ) : k(arg_k)
{
/* Do some particular stuff */
CommonConstructor();
}
};
This runs out of steam however if you have const member objects, or
references as members (assuming you don't want to duplicate code).
2) The better way
/* Start off with a bare-bones base class */
class BB_Monkey {
protected:
int k;
char* const r;
int& j;
public:
BB_Monkey( int const arg_k, char* const arg_r
int& arg_j)
: k(arg_k), r(arg_r), j(arg_j) {}
};
class Monkey : public BB_Monkey {
public:
/* Now put all the fancy constructors
in here, and have them call the
common-denominator base-class constructor */
Monkey( int ) : BB_Monkey(...
};
What you want can be done... I suppose the only question is:
Should it be made more convenient by adding certain functionality to the
language?
-Tom=E1s
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]