оценка конструктора параметров c ++

Как приведенная ниже программа оценивает следующее? 1. Как оценивается параметризованный конструктор? слева направо ?

ZA (int n) 0 —> вызывается конструктор базового класса.

ZA (int n) 2 -> как здесь m_i = 2?

ZA (int n) 0 —-> конструктор для переменной-члена ZA, определенной в Zb, называется

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;
}

2

Решение

Вот что происходит:

  • 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«

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]