Pensé que los constructores controlan la inicialización y operator = funciones controlan la asignación en C++. Entonces, ¿por qué funciona este código?Asignación vs Inicialización en C++
#include <iostream>
#include <cmath>
using namespace std;
class Deg {
public:
Deg() {}
Deg(int a) : d(a) {}
void operator()(double a)
{
cout << pow(a,d) << endl;
}
private:
int d;
};
int
main(int argc, char **argv)
{
Deg d = 2;
d(5);
d = 3; /* this shouldn't work, Deg doesn't have an operator= that takes an int */
d(5);
return 0;
}
En la tercera línea de la función principal, yo estoy asignando un int
a un objeto de clase Deg
. Como no tengo una función operator=(int)
, pensé que esto ciertamente fallaría ... pero en su lugar llama al constructor Deg(int a)
. Entonces, ¿los constructores también controlan la asignación?
+1 para explícita – dimba
Al menos una empresa que he trabajado ha tenido en la regla de "uso explícito de todos los constructores a menos que haya una buena razón para no "entre sus estándares de codificación. Eso ayuda a evitar situaciones potencialmente misteriosas como esta. – Sean
Supongo que te refieres a todos los constructores que se pueden invocar con un solo argumento :)? –