jbu
jbu

Reputation: 16181

C++: newbie initializer list question

Newbie here. I am looking at company code.

It appears that there are NO member variables in class A yet in A's constructor it initializes an object B even though class A does not contain any member variable of type B (or any member variable at all!).

I guess I don't understand it enough to even ask a question...so what's going on here!? My intuition is that you need a variable before you even try to initialize it. How is it possible (or what good does it do) to initialize an object without having the object?

.h:

class A: public B
{
public:
     A(bool r = true);
     virtual ~A;

private:
}

.cpp:

A::A(bool r) : B(r ? B::someEnumeration : B::anotherEnumeration)
{
}

A::~A()
{
}

Please help.

Thanks, jbu

Upvotes: 3

Views: 644

Answers (5)

Ashish
Ashish

Reputation: 8529

Since construtor cannot be inherited so base class data members are to be initialized by passying argument in derived class constructor and with the help of initialization list.

You should also know that in case of polymorphic class initialization of vptr to respective virtual table is done only in constructor.

Upvotes: 0

luke
luke

Reputation: 37493

Class A (publicly) inherits from class B:

class A: public B

The only way to initialize a base class with parameters is through the initializer list.

Upvotes: 9

Daniel
Daniel

Reputation: 75

class A: public B
{
public:
     A(bool r = true); // defaults parameter 1 as "true" if no arguments provided ex A *pA = new A();
     virtual ~A;

private:
}

.cpp

A::A(bool r) : B(r ? B::someEnumeration : B::anotherEnumeration)
{
  // calls parent class, and initialize argument 1 with some enumeration based on whether r is true or false
}

A::~A()
{
}

Upvotes: 0

Brian R. Bondy
Brian R. Bondy

Reputation: 347586

class A : public B
{
};

class B
{
  public:
  int x;
};

A is a derived type from B. Or A inherits B.

So this is valid...

A a;
a.x = 3;

The rest of your code is just calling B's constructor when A is constructed.

Upvotes: 0

pmr
pmr

Reputation: 59841

This is actually the only way to call the ctor of a base class in C++ as there is noch such thing as super().

Upvotes: 0

Related Questions