Я изучаю перегрузку операторов, есть некоторые части, которые трудно понять.
См. Пример кода.
class A {
private:
char a;
int b;
double c;
public:
A(char _a = 'a', int _b = 99, double _c = 1.618) :a(_a), b(_b), c(_c){
}
public:
operator char() const {
cout << "operator char() called" << endl;
return this->a;
}
operator int() const {
cout << "operator int() called" << endl;
return this->b;
}
operator double() {
cout << "operator double() called" << endl;
return this->c;
}
};
int main(void) {
A a;
char b = a;
int c = a;
double d = a;
printf("%c\n", b);
printf("%d\n", c);
printf("%f\n", d);
return 0;
}
Я создал этот код для проверки оператора преобразования типов и ожидал, что соответствующая функция будет вызываться для каждого типа данных.
Но результат ..
operator double() called
operator double() called
operator double() called
<-- strange character is gone on board!
1
1.618000
Я не могу понять, почему результаты не таковы.
operator char() called
operator int() called
operator double() called
a
99
1.618
Почему двойной оператор вызывается при преобразовании в char и int?
Хорошего дня! :)