重载、覆盖与隐藏

 

重载是对于同一范围中的不同函数(如一个类中不同的成员函数)而言的,这些函数名称相同,但是参数不一致。不一致的参数可以是个数、类型不同。重载与函数返回值无关。如下例:

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);//隐藏了父类的第三个函数。

};

posted @ 2010-05-19 10:13  jiaozebo  阅读(225)  评论(0编辑  收藏  举报