C++: newbie initializer list question

2019-07-04 11:33发布

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

5条回答
祖国的老花朵
2楼-- · 2019-07-04 12:13
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.

查看更多
倾城 Initia
3楼-- · 2019-07-04 12:14

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.

查看更多
forever°为你锁心
4楼-- · 2019-07-04 12:21

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.

查看更多
Summer. ? 凉城
5楼-- · 2019-07-04 12:25
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()
{
}
查看更多
虎瘦雄心在
6楼-- · 2019-07-04 12:30

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

查看更多
登录 后发表回答