重载、覆盖与隐藏
重载是对于同一范围中的不同函数(如一个类中不同的成员函数)而言的,这些函数名称相同,但是参数不一致。不一致的参数可以是个数、类型不同。重载与函数返回值无关。如下例:
class A
{
void func();
virtual void func(int a);
int func(char c);
};
其中三个func函数为重载的关系。
覆盖是对于父类和其子类而言的,若父类有成员函数被vitual修饰,而子类中也有与之相同的函数(函数名、返回值、参数类型及参数个数都相同),则此父类的此成员函数被其子类覆盖。
如下例:
class Aa :public A
{
void func(int a);
};
其中Aa 类func函数覆盖了A类的第二个func 函数。
隐藏也是对于父类和其子类而言的,有两种方式的隐藏:
1)若子类中有与父类同名但参数不同的函数,那么子类函数则隐藏父类函数。此时如果用子类调用父类的此函数则会出错。
2)若父类函数没有被vitual 修饰,而其子类又有一个同父类一致的函数(名称、参数类型与数目都一致),那么子类函数隐藏父类函数。如果用子类调用父类的此函数会出错。
如下例:
class Ab :public A
{
void func(int a,int b);//把父类的所有函数都隐藏了。
char func(char c);//隐藏了父类的第三个函数。
};