2011-07-27 14 views
5

Mam dwie klasy:Dlaczego operator typecasting nie działa z odziedziczoną klasą?

struct B {}; 
struct D { 
    operator B&(); 
}; 

Kiedy zrobić;

b = d; // B b; ... D d; 

Wynik jest jak na oczekiwanie gdzie D::operator B&() jest wywoływany (Demo).

Jeśli D zmienia się na,

struct D : B { 
    operator B&(); 
}; 

następnie D::operator B&() nie jest wywoływany (Demo). Czy B::B(const B&) znajduje lepszego kandydata pod numerem D, a następnie D::operator B&()?

Odpowiedz

7

Jeśli D wywodzi się z , istnieje domyślna automatyczna konwersja z D na B. Ma to wyższy priorytet niż operator konwersji zdefiniowany przez użytkownika.

Powiązane problemy