5.2 Nested constructor calls

Note that constructors can be called in a nested manner. Let us consider the following example:

class Component
{
  public:
    Component(void);
};

class Whole
{
    Component c1, c2;
  public:
    Whole(void);
};

Component::Component(void)
{
  cout << "Component constructor called" << endl;
}

Whole::Whole(void)
{
  cout << "Whole constructor called" << endl;
}

What messages do you think is generated when the following code is encountered?

Whole wholeGrain;

When wholeGrain is created, it first invokes the constructors of its components, c1 and c2. This generates two messages saying ``Component constructor called''. Next, the constructor of Whole is called, generating a message saying ``Whole constructor called''.

In other words, when a constructor of a class is invoked, it can assume that all its components (data members) are initialized by their own constructors.



Copyright © 2006-09-26 by Tak Auyeung