Допустим, мы хотим реализовать некоторую цепочку преобразований для объектов классов A, B, C:
A → B → C
Во-первых, можно написать функции преобразования (ну это понятно).
Во-вторых, использовать конструктор (см. вопрос 46). Для этого нужно добавить конструкторы B::B(A) и C::C(B) и преобразовывать на здоровье. Хоть явно, хоть неявно, как в примере:
struct A{
};
struct B{
B(const A&){};
};
struct C{
C(const B&){};
};
int main() {
A a;
B b = a;
C c = b;
}
Я не добавлял никаких операций в класс A, так как B сам преобразовывает A → B. Преобразованием B → C, занимается C. Но часто оказывается так, что нежелательно или невозможно добавить операцию в C, зато B знает как преобразовать себя в C. Тогда нужно использовать оператор преобразования.
struct A{
};
struct C{
};
struct B{
B(const A&){};
operator C(){};
};
int main() {
A a;
B b = a;
C c = b;
}
Итак, мини-шпаргалка:
T → B используем конструктор B::B(T) B → T используем B::operator T()
Перегрузить операцию преобразования значений типа Dollars в тип int. Делается это следующим образом:
ОтветитьУдалитьclass Dollars
{
private:
int m_dollars;
public:
Dollars(int dollars=0)
{
m_dollars = dollars;
}
// Перегрузка операции преобразования значений типа Dollars в значения типа int
operator int() { return m_dollars; }
int getDollars() { return m_dollars; }
void setDollars(int dollars) { m_dollars = dollars; }
};
https://ravesli.com/urok-140-peregruzka-operatsij-preobrazovaniya-tipov-dannyh/