#include <iostream>
struct B1
{
virtual void method()=0;
virtual ~B1(){}
};
struct B2
{
virtual void method()=0;
virtual ~B2(){}
};
struct D: B1, B2
{
virtual void method()
{
std::cout << "D::method\n";
};
};
int main(int argc,char *argv[])
{
D d;
B1 &b1=d;
B2 &b2=d;
b1.method();
b2.method();
return 0;
}
Lưu ý, B1 và B2 không chia sẻ giao diện chung.Ghi đè chức năng ảo của các lớp cơ sở không có chung giao diện
Điều này có hợp pháp không? Nếu có - trong tiêu chuẩn nào? C++ 98/03/11?
Cả hai, msvc và gcc đã biên dịch OK.
Trước đây tôi nghĩ, rằng tôi phải sử dụng một số giao diện chung cho trường hợp này (có thể thừa kế ảo).
Tình huống như vậy có một số tên đặc biệt không?
Cách thức hoạt động chi tiết, vui lòng? Có lẽ một số tài liệu tham khảo ISO?
Nếu bạn giải thích điều gì khiến bạn nghĩ rằng đó là trường hợp đặc biệt, ai đó có thể tìm thấy lời giải thích tốt. –
Vì trong trường hợp đó, tôi mong đợi có hai hàm * thừa kế riêng biệt khác nhau trong phương thức D: B1 :: và phương thức B2 ::. – John