ализации виртуальных базовых к
Автор admin Вторник, 16 июня 2009 11:32
ализации виртуальных базовых классов. Проблемы разрешения имен Неоднозначности, рассмотренные нами для подобъектов, относятся к любым именам, в том числе к именам функций. Если класс имеет несколько непосредственных базовых классов с одноименными функциями, то при вызове одной из этих функций компилятор не будет знать, какую функцию выбрать. Рассмотрим пример подобной ошибки: // C09:AmbiguousName.cpp {-хо} class Тор { public: virtual -ТорО {} }: class Left : virtual public Top { public: void f() {} }: class Right : virtual public Top { public: void f() {} }: class Bottom : public Left, public Right {}; int mainO { Bottom b: b.f(): // Ошибка } ///:- Класс Bottom унаследовал две одноименные функции (сигнатура несущественна, поскольку разрешение имен происходит до разрешения перегрузки) и не может различить их. Стандартный способ ликвидации таких неоднозначностей основан на уточнении вызова функции именем базового класса: Проблемы разрешения имен 463 //: C09:BreakTie.cpp class Top { public: virtual -TopO {} }: class Left : virtual public Top { public: void f() {} }: class Right : virtual public Top {
Комментарии закрыты.
Последние комментарии