3

新手来了 我正在查看公司代码。

似乎 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

4

5 回答 5

9

A(公开)继承自类B

class A: public B

使用参数初始化基类的唯一方法是通过初始化列表。

于 2009-12-03T20:29:38.850 回答
0

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

于 2009-12-03T20:31:17.603 回答
0
class A : public B
{
};

class B
{
  public:
  int x;
};

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

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

A a;
a.x = 3;

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

于 2009-12-03T20:34:45.470 回答
0

由于构造函数不能被继承,因此基类数据成员将通过在派生类构造函数中传递参数并在初始化列表的帮助下进行初始化。

您还应该知道,在 vptr到各个虚拟表的多态类 初始化的情况下,仅在构造函数中完成。

于 2009-12-03T20:35:36.193 回答
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()
{
}
于 2009-12-03T20:39:20.117 回答