c ++参数构造函数评估

时间:2013-06-20 12:57:49

标签: c++ constructor parameterized

以下程序如何评估以下内容? 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;
}

1 个答案:

答案 0 :(得分:1)

以下是发生的事情:

  • ZB(0)被调用但未运行

  • 基础构造函数ZA(0)被称为=&gt; “ ZA(int n)0 ”和m_i = 1

  • 初始化程序按字段声明:

    的顺序处理
      使用++ 1 = 2 =&gt;评估
    • 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