虚函数

开发工具与关键技术: Visual Studio / C++
作者:何文涛
撰写时间:2019-5-27

虚函数是指使用了修饰符virtual修饰过后的函数,而且定义虚函数的函数必须为类的成员函数,虚函数被继承后所继承的派生类都是为虚函数,友员函数不能被定义为虚函数,但是可以被定义为另外一个类的友员,析构函数可以定义为虚函数,但是构造函数却不能定义为虚函数。

虚函数例子:
如图所示,

在这里插入图片描述

图中所示,定义了三个类,分别是类Ared,类Bred和类Cred其中类类Bred和类Cred
都是继承于类Ared的,并且基类Ared构造函数定义了int的变量A,而派生类Bred定
义了两个变量A和B其中A是继承于基类Ared,派生类Cred也同样继承基类的A并且定
义了一个变量C。
这里定义了三个多态Cout来进行输出结果,分别输出的是基类的a,派生类b和派生类c

Main函数部分:
void main()
{
Ared A(5); Bred B(5, 6); Cred C(5, 7);
Ared S;
S = &A; S->Cout();
S = &B; S->Cout();
S = &C; S->Cout();
}
main主函数部分,分别定义了类Ared,Bred和Cred的对象,并且进行了赋值
在定义基类的指针
S并且指向了基类A和其余两个派生类并且用指针多态访问了基类和两个派生类。

在这里插入图片描述

以上是输出结果,基类Ared输出的是本身的A的值,而类B和类C输出的是本身派生类的
值,输出的是这个结果是因为把类定义为虚函数,基类被定义为虚函数那么派生类也成了
虚函数,否则没被定义为虚函数的话那么其余两个派生类输出的结果是基类的A的值

虚析构函数:
作用:虚析构函数,能够使派生类对象在不同状态下正确调用析构函数
析构函数可以被定义为虚函数,虚析构函数用在delete释放内存正确析构动态对象。而构造函数不能定义为虚函数是因为建立一个派生类时候是必须要从类层次开始继承,然后逐个的把基类的构造函数调用。

虚析构函数例子:
如图所示,

在这里插入图片描述

在这里插入图片描述

图中的例子,图一定义了两个类分别是类A和类B而且类B继承于类A
类A和类B分别定义了构造函数和析构函数。
并且类A定义了析构函数是添加了virtual修饰符所以是个虚构造函数
,理所当然派生类也是一个虚构造函数。
Main主函数里面为类a和 b分别创建分配了内存空间,然后delete
调用了类B和类A的虚析构函数,由于加了virtual修饰了虚析构函数
所以在delete释放
a的内存时候会把派生类B的析构函数也调用了
否则用普通的析构函数则不会被调用。
右边是输出结果,首先delete释放
a内存调用了析构函数,由于是虚析
构函数所以连同派生类的内存也一起析构了,然后再调用派生类B虚析构函
数析构了*b。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值