c++部分面试题
Posted fmoon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++部分面试题相关的知识,希望对你有一定的参考价值。
c++的重载和覆盖的关系?
答:
一. 重载(overload)
1. 重载指的是函数具有的不同的参数列表,而函数名相同的函数。重载要求参数列表必须不同,比如参数的类型不同、参数的个数不同、参数的顺序不同。
2. 如果仅仅是函数的返回值不同是没办法重载的,因为重载要求参数列表必须不同。
二. 覆盖(重写override)
1. 覆盖是存在类中,子类重写从基类继承过来的函数。函数名、返回值、参数列表都必须和基类相同。
2. 当子类的对象调用成员函数的时候,如果成员函数有被覆盖则调用子类中覆盖的版本,否则调用从基类继承过来的函数
3. 如果子类覆盖的是基类的虚函数,可以用来实现多态。
当子类重新定义基类的虚函数之后,基类指针可以根据赋给它不同子类指针动态的调用子类中的虚函数,可以做到动态绑定,这就是多态。
4. 子类覆盖基类函数的特征
(1)函数名相同、参数相同、返回值相同
(2)如果基类函数是虚函数,子类覆盖虚函数可以实现多态
三. 重载和覆盖的区别
1. 重载要求函数名相同,但是参数列表必须不同,返回值可以相同也可以不同。
覆盖要求函数名、参数列表、返回值必须相同。
2. 在类中重载是同一个类中不同成员函数之间的关系
在类中覆盖则是子类和基类之间不同成员函数之间的关系
3. 重载函数的调用是根据参数列表来决定调用哪一个函数
覆盖函数的调用是根据对象类型的不同决定调用哪一个
4. 在类中对成员函数重载是不能够实现多态
在子类中对基类虚函数的覆盖可以实现多态
如果基类函数是虚函数,那么子类重新定义就属于覆盖。
如果基类函数不是虚函数,那么子类重新定义属于隐藏基类函数。
c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆).
以上是关于c++部分面试题的主要内容,如果未能解决你的问题,请参考以下文章