Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1744485
  • 博文数量: 263
  • 博客积分: 1218
  • 博客等级: 少尉
  • 技术积分: 2862
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-19 02:33
文章分类

全部博文(263)

文章存档

2020年(12)

2019年(2)

2018年(10)

2016年(1)

2015年(20)

2014年(115)

2013年(46)

2012年(37)

2011年(20)

分类: C/C++

2014-06-26 22:56:34

1.重载(overload)的特征:

a).几个函数如果是重载,那么他们的作用域相同,即在同一个范围内。【例如:在同一个类中,或者在同一个全局中】

b).函数名字必须相同,但是参数必须不同【个数可以不同,类型也可以不同】

c).virtual关键字可有可无.

【重载的作用就是同一个函数有不同的行为】

2.覆盖(override)的特征:

a).覆盖指的是派生类的函数覆盖基类的函数,因此范围不同,一个是在基类,一个是在派生类中。

b).函数名字和参数都必须完全相同。

c).virtual关键字必须出现在基类的函数中。

【所谓的覆盖指的是:用基类对象的指针或者引用访问虚函数时会根据实际的类型决定所调用的函数】

3.隐藏(hide)的特征:

a).派生类的函数隐藏(或者说是屏蔽)了与其同名的基类的函数。隐藏的理解:在调用一个类的成员函数的时候,编译器会沿着类的继承链逐级的向上查找函数的定义,如果找到了,那么就停止查找了。所以如果一个派生类和他的基类都有同一个同名(且不论其参数)的函数,而编译器最终选择了派生类中的函数,那么就说派生类中的成员函数隐藏了基类中的成员函数,也就是说它阻止了编译器继续向上查找的行为。

b).因为覆盖中说到了基类中的函数存在了virtual关键字,且名字和参数都相同的情况下是覆盖了,那么隐藏的特点就是如下了:

1).在派生类和基类中函数名相同,但参数不同(因为参数不同就不会构成了覆盖的特点),所以,virtual关键字已经显得不重要了,此时就只能构成隐藏了

2).在派生类和基类中的函数名相同,参数相同,此时就要看virtual关键字了,要是没有此关键字就构成隐藏了,有此关键字就是前面所说的覆盖了。

总结:函数的覆盖是发生在派生类与基类之间,两个函数必须完全相同,并且都是虚函数。那么不属于这种情况的,就是隐藏了。

【覆盖的函数是多态的,是存在vbtl中的函数才能构成覆盖的关系;而隐藏的函数都是一般的函数,不支持多态,是在编译阶段就确定了的】

阅读(853) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~