Estoy leyendo un poco de texto en C++. En un ejemplo, el texto escrito:Pregunta sobre asignar el constructor predeterminado a * esto en C++?
class Student {
int no;
char grade[M+1];
public:
Student();
Student(int, const char*);
const Student& set(int, const char*);
void display() const;
};
Student::Student() {
no = 0;
grade[0] = '\0';
}
Student::Student(int n, const char* g) {
*this = Student(); // initialize to empty
set(n, g); // validate, reset if ok
}
No entiendo esta línea: *this = Student();
¿Por qué tenemos que hacer eso, mientras que sólo llamar Student();
también hace que el constructor por defecto invocado? Gracias
este es un mal consejo. La duplicación es mala. Donde es trivialmente evitable es especialmente imperdonable. Siga el código en la pregunta y cuando necesite extender la clase solo necesita agregar inicialización en un solo lugar. –
También podría agregar un método privado init() para los valores predeterminados y llamarlo desde todos los constructores, ahorrando la sobrecarga de la construcción de un objeto temporal. – Torp
bien, sé muy poco de los detalles de los constructores de C++. Pero sé que la duplicación del código es mala y si un inicio privado es la mejor manera de lograrlo, entonces es el camino a seguir. –