Tôi sẽ mạo hiểm nói rõ: Bạn gọi hàm, nếu nó được định nghĩa trong lớp cơ sở thì nó tự động có sẵn trong lớp dẫn xuất (trừ khi nó private
).
Nếu có một hàm có cùng chữ ký trong lớp dẫn xuất, bạn có thể định hướng hàm đó bằng cách thêm tên của lớp cơ sở theo sau là hai dấu hai chấm base_class::foo(...)
. Bạn nên lưu ý rằng không giống như Java và C #, C ++ không có từ khóa cho "lớp cơ sở" ( super
hoặc base
) vì C ++ hỗ trợ nhiều kế thừa có thể dẫn đến sự mơ hồ.
class left {
public:
void foo();
};
class right {
public:
void foo();
};
class bottom : public left, public right {
public:
void foo()
{
//base::foo();// ambiguous
left::foo();
right::foo();
// and when foo() is not called for 'this':
bottom b;
b.left::foo(); // calls b.foo() from 'left'
b.right::foo(); // call b.foo() from 'right'
}
};
Ngẫu nhiên, bạn không thể xuất phát trực tiếp từ cùng một lớp hai lần vì sẽ không có cách nào để tham chiếu đến một trong các lớp cơ sở so với lớp kia.
class bottom : public left, public left { // Illegal
};