Tôi vừa thử đoạn mã này:Nhiều thừa kế: 2Classes1Method
struct FaceOfPast
{
virtual void Smile() = 0;
};
struct FaceOfFuture
{
virtual void Smile() = 0;
};
struct Janus : public FaceOfPast, public FaceOfFuture
{
virtual void Smile() {printf(":) ");}
};
...
void main()
{
Janus* j = new Janus();
FaceOfFuture* future = j;
FaceOfPast* past = j;
future->Smile();
past->Smile();
delete j;
}
Nó hoạt động như dự kiến (kết quả đầu ra hai khuôn mặt cười), nhưng tôi không nghĩ rằng nó thậm chí nên biên dịch, việc khai báo lại số Smile()
trong Janus
không rõ ràng.
Làm thế nào (và tại sao) nó hoạt động?
Câu hỏi dường như không phải về phần gọi, nhưng phần xác định lại: tại sao bạn có thể xác định lại 2 phương thức ảo có cùng tên từ 2 lớp khác nhau bằng cách chỉ viết một phương thức đơn? – alexisdm