Tôi đang bối rối là tại sao các trình biên dịch C++ sẽ không chấp nhận điều này:Tại sao trình biên dịch C++ không phân biệt giữa công khai được kế thừa và phương thức riêng được kế thừa có cùng tên?
class Foo {
private: void Baz() { }
};
class Bar {
public: void Baz() {
};
class FooBar : public Foo, public Bar { };
void main() {
FooBar fb;
fb.Baz();
}
Các gcc lỗi cho là:
request for member ‘Baz’ is ambiguous
candidates are: void Bar::Baz()
void Foo::Baz()
nhưng không phải là nó rõ ràng rằng tôi muốn Bar :: Baz(), vì Foo :: Baz() là riêng tư? Tại sao trình biên dịch sẽ không định hướng ở đây?
Đó là một chủ ý. Nó không làm cho trình biên dịch đơn giản hơn, ngược lại, nó hơi phức tạp hơn vì truy cập phải được kiểm tra như là một bước bổ sung. – curiousguy