Рубрики

C ++ | Конструкторы | Вопрос 12

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

#include<iostream>

using namespace std;

class Point {

    int x;

public:

    Point(int x) { this->x = x; }

    Point(const Point p) { x = p.x;}

    int getX() { return x; }

};

  

int main()

{

   Point p1(10);

   Point p2 = p1;

   cout << p2.getX();

   return 0;

}

(А) 10
(B) Ошибка компилятора: p должен быть передан по ссылке
(C) стоимость мусора
(D) Ничего из вышеперечисленного

Ответ: (Б)
Объяснение: Объекты должны передаваться по ссылке в конструкторах копирования. Компилятор проверяет это и выдает ошибку компилятора, если не передается по ссылке.

Следующая программа прекрасно компилируется и выдает результат как 10.

#include <iostream >
using namespace std;
class Point {
    int x;
public:
    Point(int x) { this->x = x; }
    Point(const Point &p) { x = p.x;}
    int getX() { return x; }
};

int main()
{
   Point p1(10);
   Point p2 = p1;
   cout << p2.getX();
   return 0;
}

Причина проста: если мы не передадим по ссылке, то аргумент p1 будет скопирован в p. Поэтому будет вызов конструктора копирования для вызова конструктора копирования, что невозможно.
Тест на этот вопрос

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

C ++ | Конструкторы | Вопрос 12

0.00 (0%) 0 votes