Я ризикую висловити очевидне: Ви викликаєте функцію, якщо вона визначена в базовому класі, вона автоматично доступна у похідному класі (якщо вона не є 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
};