面试题---对C++中多态的理解

多态
<1>前序
多态,顾名思义,是指一段程序能够有处理多个对象的能力。可以理解为“一个接口,多个方法”。
程序在运行时才决定调用的函数。同一个操作作用于不同的对象,调用不同的函数,产生不同的
执行结果。(通过指向父类的指针,来调用子类的函数),从而实现接口重用。多态一般由虚函数来
实现。
<2>虚函数
虚函数注意是为实现多态而设定的。当我们想要用父类的指针保存子类的对象,
希望子类和基类有相同的函数,
希望指针根据不同的对象,调用不同的函数,这就是多态。
使用方法:

virtual 返回值类型 函数名(数据类型 变量名1,...);

特点:
(1)非类的成员函数不能定义为虚函数
(2)构造函数不能定义为虚函数,但可以将析构函数定义为虚函数 
(3)只需要在声明函数的类体中使用关键字“virtual”将函数声明为虚函数,
   而定义函数时不需要使用关键字“virtual”。
(4)当将基类中的某一成员函数声明为虚函数后,派生类中的同名函数
(函数名相同、参数列表完全一致、返回值类型相关)自动成为虚函数。

<3>[3]覆盖(重写)、重载、隐藏。
覆盖(重写):子类的函数覆盖父类的函数,子类重新定义父类的虚函数(针对虚函数而言)
               常用于继承关系中
特点:
(1)父类和子类函数名相同
(2)父类和子类的参数以及返回值值相同
(3)父类的函数中必须含有virtual关键字。 

重载:函数名相同,参数不同。与继承没有直接关联
特点:
(1)相同的作用域 (都在类中,或者类外)
(2)函数名相同
(3)参数不同
(4)virtual关键字可有可无
(5)返回值可以不同

隐藏:子类的函数屏蔽了父类的同名函数。只有是同名函数,没有virtual,不管参数列表是否形同。
           父类的函数都会被隐藏。
(1)不在同一个作用域(分别位于子类和父类)
(2)函数名相同
(3)返回值可以不同
(4)参数可以不同,此时,不论有无 virtual 关键字,基类的函数将被隐藏
     (与重载有区别)
(5)参数相同,但是基类函数没有 virtual关键字。此时,

     基类的函数被隐藏(注意与覆盖的区别)


第二天

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屁小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值