¿Tenemos que definir explícitamente un constructor predeterminado cuando definimos un constructor de copia para una clase? Por favor, den razones.Copy Constructor y constructor predeterminado
por ejemplo:
class A
{
int i;
public:
A(A& a)
{
i = a.i; //Ok this is corrected....
}
A() { } //Is this required if we write the above copy constructor??
};
Además, si definimos cualquier otro constructor con parámetros para una clase que no sea el constructor de copia, es lo que también hay que definir el constructor por defecto ?? Considere el código anterior sin el constructor de copia y reemplazarlo con
A(int z)
{
z.i = 10;
}
Alrite .... Después de ver las respuestas que escribió el siguiente programa.
#include <iostream>
using namespace std;
class X
{
int i;
public:
//X();
X(int ii);
void print();
};
//X::X() { }
X::X(int ii)
{
i = ii;
}
void X::print()
{
cout<<"i = "<<i<<endl;
}
int main(void)
{
X x(10);
//X x1;
x.print();
//x1.print();
}
Y este programa parece funcionar bien sin el constructor predeterminado. Por favor, explica por qué es este el caso? Estoy realmente confundido con el concepto .....
Estoy confundido. Aunque la respuesta a continuación es correcta, no es un constructor de copias. ¿Dónde estás copiando 'i', exactamente? Está modificando el lado derecho, que generalmente es lo incorrecto. Deberías hacer 'A (const A & rhs): i (rhs.i) {}', eso es copiar el 'i' del lado derecho en esta instancia de 'i' de A'. Tenga en cuenta que los parámetros se pasan por constante, porque cuando dice algo como x = 3, 3 no debería cambiar. Además, generalmente los tipos numéricos se pasan por valor, no como referencia, porque las referencias pueden ser más lentas para los tipos de datos pequeños. – GManNickG
Wow ... Gracias por su comentario ... despejó la confusión sobre la parte ": i (rhs.i)" del constructor que me ha estado confundiendo desde que empecé a estudiar constructores esta mañana ... –
Su El último programa no usa el constructor predeterminado en ninguna parte. Por esta razón, no necesita definirlo. Eso es todo lo que hay. – AnT