//:采用using声明,使查找范围扩大至父类指定的函数:class Base{public:void CommonFunction(){cout << "Base::CommonFunction()" << endl;}void virtual VirtualFunction(){cout << "Base::VirturalFunction()" << endl;}void virtual VirtualFunction(int x){cout << "Base::VirtualFunction() With Parms" << endl;}void virtual PureVirtualFunction() = 0;};class Derived: public Base{public:using Base::VirtualFunction; // 第一级查找也要包括Base::VirtualFunctionvoid CommonFunction(){cout << "Derived::CommonFunction()" << endl;}void virtual VirtualFunction(){cout << "Derived::VirturalFunction()" << endl;}void virtual PureVirtualFunction(){cout << "Derived::PureVirtualFunction()" << endl;}};int main(){Derived d;d.VirtualFunction(3); // 这样没问题了,编译器会把父类作用域里面的函数名VirtualFunciton也纳入第一批查找范围,这样就能发现其实是父类的函数与main中的调用匹配得更好(因为有一个形参),这样会输出Base::VirtualFunction() With Parmsreturn 0;}
//:使用转交函数强制指定父类的作用域class Base{public:void CommonFunction(){cout << "Base::CommonFunction()" << endl;}void virtual VirtualFunction(){cout << "Base::VirturalFunction()" << endl;}void virtual VirtualFunction(int x){cout << "Base::VirtualFunction() With Parms" << endl;}void virtual PureVirtualFunction() = 0;};class Derived: public Base{public:using Base::VirtualFunction;void CommonFunction(){cout << "Derived::CommonFunction()" << endl;}void virtual VirtualFunction(){cout << "Derived::VirturalFunction()" << endl;}void virtual PureVirtualFunction(int x){cout << "Derived::PureVirtualFunction()" << endl;}void virtual VirtualFunction(int x){Base::VirtualFunction(x)};};int main(){Derived d;d.VirtualFunction(3); // 输出Base::VirtualFunction() With Parmsreturn 0;}
原文:http://www.cnblogs.com/chengkeke/p/5417380.html