以下程序如何评估以下内容? 1.如何评估参数化构造函数?左到右 ?
ZA(int n)0 --->基类构造函数叫。
ZA(int n)2 - >这里m_i = 2怎么样?
ZA(int n)0 ----> Zb中定义的ZA成员变量的构造函数,名为
ZA(int n)0
ZB(int n)2
#include <iostream>
using namespace std;
class ZA
{
public:
ZA(int n = 0) : m_i(n)
{
std::cout <<"ZA (int n)" <<m_i<<endl;
++m_i;
}
protected:
int m_i;
};
class ZB : public ZA
{
public:
ZB(int n = 5) : m_a(new ZA[2]), m_x(++m_i)
{
std::cout <<"ZB (int n)" <<m_i<<endl;
}
~ZB()
{
delete [] m_a;
}
private:
ZA m_x;
ZA *m_a;
};
int main(void)
{
ZB b;
std::cout << std::endl;
}
答案 0 :(得分:1)
以下是发生的事情:
ZB(0)
被调用但未运行
基础构造函数ZA(0)
被称为=&gt; “ ZA(int n)0 ”和m_i = 1
初始化程序按字段声明:
的顺序处理 m_x(++m_i)
“ ZA(int n)2 ”和m_i = 2
m_a(new ZA[2])
并创建两个ZA实例=&gt; “ ZA(int n)0 ”两次
最后运行ZB构造函数=&gt; “ ZB(int n)2 ”