C ++:newbie初始化列表问题

时间:2009-12-03 20:27:31

标签: c++ list initializer

新手在这里。我在看公司代码。

似乎A类中没有成员变量但是在A的构造函数中它初始化了一个对象B,即使类A不包含任何类型B的成员变量(或任何成员变量!)。

我想我甚至不能理解问题......所以这里发生了什么!?我的直觉是你甚至在尝试初始化它之前需要一个变量。如何在没有对象的情况下初始化对象有可能(或者有什么用呢)?

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

请帮忙。

谢谢, JBU

5 个答案:

答案 0 :(得分:9)

班级A中的B(公开)inherits

class A: public B

唯一的way to initialize a base class with parameters是通过初始化列表。

答案 1 :(得分:0)

这实际上是在C ++中调用基类的ctor的唯一方法,因为有super()之类的东西。

答案 2 :(得分:0)

class A : public B
{
};

class B
{
  public:
  int x;
};

A是来自B的派生类型。或者A继承B。

所以这是有效的......

A a;
a.x = 3;

代码的其余部分只是在构造A时调用B的构造函数。

答案 3 :(得分:0)

由于construtor不能被继承,所以基类数据成员将通过派生类构造函数中的passying参数并在初始化列表的帮助下初始化。

您还应该知道,如果多态类 初始化vptr 到相应的虚拟表,只能在构造函数中完成。

答案 4 :(得分:0)

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