C++ | Constructores | Pregunta 12

Prediga la salida del siguiente programa.

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

(A) 10
(B) Error del compilador: p debe pasarse por referencia
(C) Valor basura
(D) Ninguno de los anteriores

Respuesta: (B)
Explicación: Los objetos deben pasarse por referencia en los constructores de copias. El compilador verifica esto y produce un error del compilador si no se pasa por referencia.

El siguiente programa compila bien y produce una salida como 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;
}

La razón es simple, si no pasamos por referencia, el argumento p1 se copiará en p. Por lo tanto, habrá una llamada al constructor de copia para llamar al constructor de copia, lo cual no es posible.
Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *