【发布时间】:2020-10-31 11:35:23
【问题描述】:
我不明白为什么这段代码会打印 02002 而不是 00022。据我所知,构造函数的顺序是:首先是基类,然后是成员对象(按初始化列表的顺序),然后是实际类的构造函数。我在这里有什么问题?
#include <iostream>
class A
{
public:
A(int n = 0)
: m_i(n)
{
std::cout << m_i;
++m_i;
}
protected:
int m_i;
};
class B
: public A
{
public:
B(int n = 5) : m_a(new A[2]), m_x(++m_i) { std::cout << m_i; }
~B() { delete[] m_a; }
private:
A m_x;
A* m_a;
};
int main()
{
B b;
std::cout << std::endl;
return 0;
}
【问题讨论】:
-
初始化顺序不是根据初始化列表中的顺序。每个
new A[2]中的m_i彼此不同,并且与作为基础的A的m_i不同。
标签: c++ inheritance constructor