先看一个超类(Super)一个子类(Sub)的定义,主要关注someMethod这个方法。
class Super
{
public:
Super();
~Super();
virtual void someMethod(); //这是参数的方法
virtual void someMethod(int i); //这是有参数的方法
protected:
int mProtectedInt;
private:
int mPrivateInt;
};
class Sub : public Super
{
public:
Sub();
~Sub();
//using Super::someMethod; //暂时不用using
virtual void someOtherMethod();
virtual void someMethod();
};
这样定义子类时,超类的无参数someMethod()的方法会被覆盖,而有参数的someMethod(int i)的方法会被隐蔽,也是就说下面代码会出错
Sub mySub;
mySub.someMethod(7); //出错,因为超类的有参数someMethod(int i)的方法被隐蔽,无法调用
但是,如果在子类的定义中,使用using即
class Sub : public Super
{
public:
Sub();
~Sub();
using Super::someMethod;
virtual void someOtherMethod();
virtual void someMethod();
};
这时下面的代码就不会出错了
Sub mySub;
mySub.someMethod(7);