для кода ниже в интернет-C++ викторины раздел http://www.interqiew.com/ask?ta=tqcpp02&qn=3 - Я не могу понять, ответ - я добавил печати заявление -Объем переменной и объекта создания
вот что я понимаю
стадия а - создание объекта Б начинается с строитель B для параметра M_X - мы достигаем базового класса A - шаг 1 выполнен выход 0 - и приращения m_i 1
стадия B - код теперь становится M_X (2) - шаг 1 выполнил вывод 2 и увеличил m_i t O 3 создание M_X сделано
Стадия C - код достигает [2] (так что для двух объектов будет происходить ниже) - шаг 1 выполнен выход 0 и приращения m_i до 1 создания А [0] и A [1] сделано
Я визуализируя объект б с 3 контейнерами M_X, A [0] и а [1], каждая со значением m_i
Я не понимаю, ниже выхода - как мы получаем выход 2 - какое значение m_i используется?
Стадия D - входит в область STEP3 - шаг 3 выполнен выход 2
Выход -
шаг 1 --- 0 шаг 1 --- 2 шаг 1 - - 0 шаг 1 --- 0 шаг 3 ---- 2
class A
{
public:
A(int n = 0)
: m_i(n)
{
std::cout << "step 1 --- " << m_i << endl;
++m_i;
std::cout << m_i << endl;
}
protected:
int m_i;
};
class B
: public A
{
public:
B(int n = 5) : m_a(new A[2]), m_x(++m_i)
{
std::cout << "step 3 ----" << m_i << endl;
}
~B() { delete [] m_a; }
private:
A m_x;
A *m_a;
};
int main()
{
B b;
std::cout << std::endl;
return 0;
}
Должно быть, это шаг 1 и т. Д.? BTW - вы забываете наследование, в соответствии с которым база должна быть построена сначала. –
Конструктор 'B' начинается с построения своего базового класса' A', затем переходит к построению своих членов в порядке их появления в определении класса - 'm_x' first , затем 'm_a'. Еще два экземпляра 'A' строятся в инициализаторе' m_a'. Наконец, выполняется тело конструктора 'B'. –
Ах, а значит, это означает, что это будет что-то вроде ниже. Шаг 0 - Конструктор для b - достигает базового класса - выполняет шаг -1, т.е. 0, и увеличивает его до значения 1 - теперь создается m_x с шагом 2 из 2 и так далее на .. Думаю, я получил его сейчас .. !!! спасибо – oneday