Повтор базового класса в C++
Две копии предка несут один и тот же набор методов, и компилятор не знает, через какую ветку идти к общему методу.
Неквалифицированный доступ к такому методу
из самого нижнего класса помечают как
неоднозначный. Явное имя промежуточной
базы в квалификаторе выбирает нужную копию
и программа собирается. Запишем ромб
без виртуального наследования и вызов
через Left:::
┌pPathX="main.cpp"
#include <iostream>
class Base {
public:
void ping() {
std::cout << "base\n";
}
};
class Left : public Base {};
class Right : public Base {};
class Bottom : public Left, public Right {
public:
void call() {
Left::ping();
}
};
int main() {
Bottom item;
item.call();
return 0;
}
Постройте ромб с методом mark
в Base. В Bottom вызовите
его через Right:: и выведите
строку, которую печатает метод.