隐藏
case 1:
基类:
virtual void DoJob(int a)
{count<<"one in base class"<<a<<endl};
virtual void DoJob(int a, int b)
{count<<"two in base class"<<a<<endl};
子类:
空
结论:直接调用基类的方法
case 2:
基类:
void DoJob(int a)
{count<<"one in base class"<<a<<endl};
void DoJob(int a, int b)
{count<<"two in base class"<<a<<endl};
子类:
空
结论:直接调用基类的方法
case 3:
基类:
virtual void DoJob(int a)
{count<<"one in base class"<<a<<endl};
virtual void DoJob(int a, int b)
{count<<"two in base class"<<a<<endl};
子类:
void DoJob(int a) 或 void DoJob(int a, int b)
结论:只能调用子类的方法,基类的方法隐藏(添域可直接调用)
case 4:
基类:
virtual void DoJob(int a)
{count<<"one in base class"<<a<<endl};
virtual void DoJob(int a, int b)
{count<<"two in base class"<<a<<endl};
子类:
void DoJob(double a)
结论:只能调用子类的方法,基类的方法隐藏(添域可直接调用)
case 5:
基类:
void DoJob(int a)
{count<<"one in base class"<<a<<endl};
void DoJob(int a, int b)
{count<<"two in base class"<<a<<endl};
子类:
void DoJob(int a) 或 void DoJob(int a, int b)
结论:只能调用子类的方法,基类的方法隐藏(添域可直接调用)
case 6:
基类:
void DoJob(int a)
{count<<"one in base class"<<a<<endl};
void DoJob(int a, int b)
{count<<"two in base class"<<a<<endl};
子类:
void DoJob(double a)
结论:只能调用子类的方法,基类的方法隐藏(添域可直接调用)
由此看来,隐藏与基类是否用virtual并没有直接的关系,关键是看基类是否写了同名的函数,写了同名的函数(无论参数列表和类型是否相同),基类的方法隐藏,默认只能调用子类的函数(可通过域调用基类的方法,Example:B子类,A基类 b.A::DoJob(5)).