C++/Konwersje obiektów
C++ pozwala na przeciążanie operatorów konwersji, co pozwala na niejawną konwersję klasy na inny typ. Istnieją dwa typy operatorów konwersji: operator konwersji na typ i operator konwersji na bool.
Operator konwersji na typ jest funkcją członkowską, która konwertuje obiekt klasy na określony typ. Składnia tego operatora to:
operator type() const;
Rozważmy na przykład klasę MyClass, która reprezentuje liczbę zespoloną. Operator konwersji na podwójne można zdefiniować w następujący sposób:
class MyClass {
public:
operator double() const {
return real_;
}
private:
double real_;
double imag_;
};
Pozwala to na niejawną konwersję obiektu MyClass na obiekt typu double, gdy jest to konieczne.
Operator konwersji na bool jest funkcją członkowską, która określa, czy obiekt klasy jest uważany za prawdziwy, czy fałszywy. Składnia tego operatora to:
explicit operator bool() const;
Słowo kluczowe explicit służy do zapobiegania niejawnym konwersjom na bool. Na przykład:
class MyClass {
public:
explicit operator bool() const {
return (real_ != 0.0 || imag_ != 0.0);
}
private:
double real_;
double imag_;
};
W takim przypadku obiekt MyClass zostanie uznany za prawdziwy, jeśli jego część rzeczywista lub urojona jest różna od zera.
Konstruktora można również użyć jako metody konwersji. Jest to znane jako jawny konstruktor. Konstruktor jawny to konstruktor, którego można używać tylko do jawnych konwersji. Składnia jawnego konstruktora to:
explicit ClassName(parameters);
Na przykład:
class MyClass {
public:
explicit MyClass(int x) : value_(x) {}
private:
int value_;
};
W takim przypadku konstruktora MyClass można użyć do jawnej konwersji typu int na obiekt MyClass.
Korzystanie z jawnych konstruktorów i operatorów konwersji może poprawić bezpieczeństwo i przejrzystość kodu, utrudniając przypadkowe wykonanie niechcianych konwersji.