/**
 * Assignment v/s Initialization in constructor
 * Example 4
 */

#include <iostream>
using namespace std;


class Inner
{
    private:
        int a;
        int b;

    public:
        Inner(int avalue, int bvalue )
        {
            //assigning to a and b
            this->a = avalue;
            this->b = bvalue;
            cout << "In Inner class ctor with params"
                 << "\ta: " << avalue
                 << "\tb: " << bvalue
                 << endl;
        }

        Inner(void)
        {
            cout << "In Inner class ctor w/o params"
                 << endl;
        }

        virtual char * Id (void )
        {
            return "Inner";
        }
};

class Container
{
    private:
        Inner foo;
    public:
        Container(int avalue, int bvalue)
            :foo( avalue, bvalue )
        {
            cout << "In Container class ctor" << endl;
        }

        virtual char * Id ( void )
        {
            return "Container";
        }

};

int main( int argc, char *argv[])
{
    Container bar(42, 24);

    cout << bar.Id() << endl;
}