Рубрики

Вывод программы C ++ | Набор 14

Предсказать вывод следующей программы на C ++.

Уровень сложности: Новичок

Вопрос 1

#include <iostream>

using namespace std;

  

class A

{

    int id;

public:

    A (int i) { id = i; }

    void print () { cout << id << endl; }

};

  

int main()

{

    A a[2];

    a[0].print();

    a[1].print();

    return 0;

}

В строке «A a [2]» есть ошибка компиляции. В классе A нет конструктора по умолчанию. Когда мы пишем наш собственный конструктор параметров или копируемый конструктор, компилятор не создает конструктор по умолчанию (см. Этот Gfact ). Мы можем исправить ошибку, либо создав конструктор по умолчанию в классе A, либо используя следующий синтаксис для инициализации члена массива с помощью конструктора параметров.

 // Initialize a[0] with value 10 and a[1] with 20 
 A a[2] = { A(10),  A(20) } 

вопрос 2

#include <iostream>

using namespace std;

  

class A

{

    int id;

    static int count;

public:

    A()

    {

        count++;

        id = count;

        cout << "constructor called " << id << endl;

    }

    ~A()

    {

        cout << "destructor called " << id << endl;

    }

};

  

int A::count = 0;

  

int main()

{

    A a[2];

    return 0;

}

Выход:

constructor called 1
constructor called 2
destructor called 2
destructor called 1

В вышеприведенной программе сначала создается объект a [0], но сначала уничтожается объект a [1]. Объекты всегда уничтожаются в порядке, обратном их созданию. Причина обратного порядка в том, что созданный позже объект может использовать ранее созданный объект. Например, рассмотрим следующий фрагмент кода.

A a;
B b(a);

В приведенном выше коде объект «b» (который создается после «а») может использовать некоторые члены «а» внутри. Таким образом, уничтожение «а» перед «б» может создать проблемы. Следовательно, объект «b» должен быть уничтожен до «a».

Вопрос 3

#include <iostream>

using namespace std;

  

class A

{

   int aid;

public:

   A(int x)

   { aid = x; }

   void print()

   { cout << "A::aid = " <<aid; }

};

  

class B

{

    int bid;

public:

    static A a;

    B (int i) { bid = i; }

};

  

int main()

{

  B b(10);

  b.a.print();

  return 0;

}

Ошибка компилятора: неопределенная ссылка на `B :: a '
Класс B имеет статический член 'a'. Поскольку член 'a' является статическим, он должен быть определен вне класса. Класс A не имеет конструктора Default, поэтому мы также должны передать значение в определении. Добавление строки «AB :: a (10);» заставит программу работать.

Следующая программа работает нормально и выдает результат «A :: aid = 10»

#include <iostream>

using namespace std;

  

class A

{

   int aid;

public:

   A(int x)

   { aid = x; }

   void print()

   { cout << "A::aid = " <<aid; }

};

  

class B

{

    int bid;

public:

    static A a;

    B (int i) { bid = i; }

};

  
A B::a(10);

  

int main()

{

  B b(10);

  b.a.print();

  return 0;

}

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Вывод программы C ++ | Набор 14

0.00 (0%) 0 votes