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