c++ map 析构函数_C++虚函数

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术: Visual Studio / C++

作者:梅花开的冬天

撰写时间:2019-5-27

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

虚函数例子:

如图所示,

7ba1b5f4d388a2aac1d6be9af10713f5.png

图中所示,定义了三个类,分别是类 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 和其余两个派生类并且用指针多态访问了基类和两个派生类。

3fa319429993b3266f7e4bd3e1e31214.png

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

虚析构函数:

作用:虚析构函数,能够使派生类对象在不同状态下正确调用析构函数

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

虚析构函数例子:

如图所示,

fdbdd647845c34d524ce8291d1893a5c.png

图中的例子,图一定义了两个类分别是类 A 和类 B 而且类 B 继承于类 A 类 A 和类 B 分别定义了构造函数和析构函数。

并且类 A 定义了析构函数是添加了 virtual 修饰符所以是个虚构造函数

,理所当然派生类也是一个虚构造函数。

Main 主函数里面为类*a 和 *b 分别创建分配了内存空间,然后 delete 调用了类 B 和类 A 的虚析构函数,由于加了 virtual 修饰了虚析构函数所以在 delete 释放*a 的内存时候会把派生类 B 的析构函数也调用了否则用普通的析构函数则不会被调用。

右边是输出结果,首先 delete 释放*a 内存调用了析构函数,由于是虚析构函数所以连同派生类的内存也一起析构了,然后再调用派生类 B 虚析构函数析构了*b。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值