新手在这里。我在看公司代码。
似乎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
答案 0 :(得分:9)
答案 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()
{
}