虚函数知识

1.1虚函数的作用

🐵重复定义:在同一个类中定义两个名字相同,参数个数和类型相同的函数

注:如果类中出现,编译系统按照同名覆盖的选择决定调用顺序

虚函数:在基类声明函数为虚拟的,在派生类正式定义此函数,使用时用指针指向某一派生类对象

🐵作用:允许派生类中重新定义与基类同名的函数,可以通过基类指针或者引用访问基类和派生类中的同名函数,同一种方式调用不同类的所有同名函数

🙈方式:在基类中函数名前加

virtual

注:

基类指针是指向基类对象的,如果指向派生类对象,自动进行类型转换,将派生类对象的指针先转换成基类的,这样基类指针指向的是派生类中的基类部分,所以无法调用派生类的成员函数

🐒动态多态性:同一类族中不同类的对象,同一函数调用做出不同反应

🌸虚函数使用方法:

(1)在基类中用virtual声明成员函数为虚函数,类外定义不用加

(2)在派生类中重新定义该函数,函数名。函数类型,函数参数个数必须与基类的虚函数相同,根据派生类的需要重新定义新函数体,可以加virtual也可以不加virtual

(3)定义一个指向基类对象的指针变量,并指向同一类族中需要调用的对象

(4)通过指针变量调用虚函数

🎐注:如果派生类指针调用非虚

函数,并不是多态行为

1.3什么情况下应该声明为虚函数

注:

①只能声明类的成员函数,不能为普通函数,也不能是友元函数

②一个成员函数被声明为虚函数后在同一个类中不能定义一个非virtual但与该虚函数有相同的参数的同名函数

考虑:

①成员函数所在的类是否作为基类,派生类中的函数功能是否要改变

②如果被继承后功能无需改变,或者派生类用不到,不用

③如果对成员函数调用是通过指针或者引用实现的

④有时候,虚函数在基类中的函数体是空的,具体功能留给派生类添加

1.4虚虚析构函数


如果建立new临时对象,如果基类有析构函数,并且定义一个指向基类的指针变量,用delete撤销时,会发生

只执行基类的虚构函数不执行派生类的析构函数

🌸将基类的析构函数声明为析构函数

注:派生类的所有析构函数都会自动为虚函数,即使名字不同

❗❗❗构造函数不可以被声明为虚函数,因为在执行构造函数时类对象还未完成建立过程,自然谈不上……

1.4纯虚函数

🙊纯虚函数

在基类中不需要该函数,返回值没有意义,不用写函数体,只给函数的原型,并加上0

virtual float are() const=0

🌸声明方式

virtual 函数类型函数名(参数列表)=0

①纯虚函数没有函数体

②最后面的“=0”并不表示函数返回值为0它只是形式上的

③是声明语句,后面有分号

如果一个类中声明了纯虚函数,但是没有定义,则在派生类中仍然为纯虚函数

1.4.2抽象类

🐵不用来生成对象,作用只是用它作为基类去建立派生类(抽象基类,凡是包含纯虚函数的,为类族提供一个接

口)

注:

①抽象基类和普通基类不一样,并不是现实存在的,没有任何物理意义

②类的层次结构中,最上面几层可以是抽象函数

③抽象基类是本类族的公共接口

④区别动态关联和静态关联⑤虚函数提高了程序的可扩充性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值