Possible Duplicates:
Variables After the Colon in a Constructor
C++ constructor syntax question (noob)
I have some C++ code here:
class demo
{
private:
unsigned char len, *dat;
public:
demo(unsigned char le = 5, unsigned char default) : len(le)
{
dat = new char[len];
for (int i = 0; i <= le; i++)
dat[i] = default;
}
void ~demo(void)
{
delete [] *dat;
}
};
class newdemo : public demo
{
private:
int *dat1;
public:
newdemo(void) : demo(0, 0)
{
*dat1 = 0;
return 0;
}
};
My question is, what are the : len(le) and : demo(0, 0) called?
Is it something to do with inheritance?
As others have said, it’s a member initializer list. You can use it for two things:
For case #1, I assume you understand inheritance (if that’s not the case, let me know in the comments). So you are simply calling the constructor of your base class.
For case #2, the question may be asked: "Why not just initialize it in the body of the constructor?" The importance of the member initializer lists is particularly evident for
constmembers. For instance, take a look at this situation, where I want to initializem_valbased on the constructor parameter:By the C++ specification, this is illegal. We cannot change the value of a
constvariable in the constructor, because it is marked as const. So you can use the initializer list:That is the only time that you can change a
constdata member. And as Michael noted in the comments section, it is also the only way to initialize a reference that is a data member.Outside of using it to initialize
constdata members, it seems to have been generally accepted as "the way" of initializing members, so it’s clear to other programmers reading your code.