C++: newbie initializer list question

人走茶凉 提交于 2019-12-10 18:27:26

问题


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


回答1:


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.




回答2:


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




回答3:


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.




回答4:


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()
{
}



回答5:


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.



来源:https://stackoverflow.com/questions/1842678/c-newbie-initializer-list-question

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!