Я думал, что конструкторы управляют инициализацией, а оператор = функции управляют назначением в 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;
}
В третьей строке основной функции я присваиваю int
объекту класса Deg
. Поскольку у меня нет функции operator=(int)
, я подумал, что это, безусловно, не получится ... но вместо этого она вызывает конструктор Deg(int a)
. Так конструкторы также управляют назначением?