2011-07-27 39 views
5

Tôi có hai lớp:Tại sao toán tử typecasting không hoạt động với lớp kế thừa?

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

Khi tôi làm;

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

Kết quả là theo kỳ vọng nơi D::operator B&() được gọi (Demo).

Nếu D được thay đổi để,

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

sau đó D::operator B&() không gọi (Demo). Có phải B::B(const B&) đang tìm một ứng cử viên tốt hơn trong D sau đó D::operator B&()?

Trả lời

7

Nếu D có nguồn gốc từ B, có chuyển đổi tự động ngầm ẩn từ D thành B. Điều này có quyền ưu tiên cao hơn so với toán tử chuyển đổi do người dùng xác định.

Các vấn đề liên quan