2

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

1 回答 1

1

这是发生的事情:

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

  • 基础构造函数ZA(0)被称为 => " ZA (int n)0 " 并且m_i = 1

  • 初始化程序按字段声明的顺序处理:

    • m_x(++m_i)使用 ++1=2 => " ZA (int n)2 " 和m_i = 2

    • m_a(new ZA[2])被评估并创建两个 ZA 实例 => " ZA (int n)0 " 两次

  • 最后运行 ZB 构造函数 => " ZB (int n)2 "

于 2013-06-20T13:34:24.643 回答