避免遮掩继承而来的名称
int x = 1; int main() { double x = 0.5; cout << x << endl; }
局部域会掩盖全局域,所以会输出0.5。
class Base { public: virtual void f1(int x); void f2(); }; class Derived: public Base { public: void f1(); void f2(); }; int main() { Derived d; d.f2(); // 正确 d.f1(2); // 错误 }
这种情况下,Base类内的函数与Derived类内的函数构成隐藏,所以d.f1(2)无法调用到Base类内的函数。
加上using声明式就解决了,构成了函数重载。
class Derived: public Base { public: using Base::f1; void f1(); void f2(); }; int main() { Derived d; d.f2(); // 正确 d.f1(2); // 正确 }