Я рискну заявить об очевидном: вы вызываете функцию, если она определена в базовом классе, она автоматически доступна в производном классе (если только private
).
Если в производном классе есть функция с такой же сигнатурой, вы можете устранить ее неоднозначность, добавив имя базового класса, за которым следуют два двоеточия base_class::foo(...)
. Вы должны заметить, что в отличие от Java и C #, C ++ не имеет ключевого слова для «базового класса» ( super
или base
), поскольку C ++ поддерживает множественное наследование, что может привести к неоднозначности.
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'
}
};
Между прочим, вы не можете наследовать напрямую от одного и того же класса дважды, так как не будет никакого способа сослаться на один из базовых классов поверх другого.
class bottom : public left, public left { // Illegal
};