多继承的名字隐藏
#include <iostream> using namespace std; class Base1 { public: void show() { cout << "Base1::show()" << endl; } }; class Base2 { public: void show() { cout << "Base2::show()" << endl; } }; class Derived : public Base1, public Base2 { public: void show() { cout << "Derived::show()" << endl; } }; int main() { Derived d; d.show(); // 以下代码将导致编译错误,因为 show 被隐藏 // d.Base1::show(); // d.Base2::show(); return 0; }
Base1 和 Base2 类都有一个名为 show 的成员函数。 Derived 类继承自 Base1 和 Base2,并且也有一个 show 成员函数。 在 main 函数中,创建了 Derived 类的对象 d,调用 d.show() 时,会调用 Derived 类的 show 方法。 若想调用 Base1 或 Base2 中的 show 方法,需要显式使用 d.Base1::show(); 或 d.Base2::show(); ,但由于代码中这两行被注释,直接调用会导致编译错误,因为编译器会认为 Derived 类的 show 函数隐藏了基类中的 show 函数,不允许直接使用 d.show() 调用基类的同名函数。