构造函数、析构函数,静态成员函数、内联函数-- 虚函数

本文探讨了虚函数的实现,包括静态多态与动态多态的区别。详细阐述了为什么构造函数不能是虚函数,而析构函数通常需要声明为虚函数以避免内存泄漏。同时,解释了类的静态成员函数的特性,说明了它们为什么不能是虚函数,并解释了内联函数与虚函数不兼容的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虚函数的实现

如果一个类的内部有虚函数,那么编译器会在类的内部添加一个虚拟函数表指针(vptr),这个vptr指向一个虚拟函数表,表中存放着该类所有虚拟函数的入口地址,在每一次虚函数调用时,会去这个表中查找地址。

多态的两种形式

1、 静态多态(编译阶段)
包括函数重载和泛型编程。
在编译时就可以确定使用的接口。
2、 动态多态(运行阶段)
包括虚函数。
具体引用的接口在运行时才能确定
在这里插入图片描述

构造函数为什么不能是虚函数

① vptr存放在对象的内部空间,需要构造函数来完成初始化。但如果构造函数是虚函数,那么调用构造函数则需要去寻找vptr,但此时vptr还未初始化,无法调用构造函数。
② 构造函数的作用是用来进行对象的初始化,在对象的生命期内仅运行一次,不是对象的动态行为,没必要成为虚函数

析构函数为什么常常是虚函数

析构函数

在某个对象被注销时,编译器会自动顺序调用该类极其父类的析构函数,而不会调用派生类的析构函数。

析构函数为什么常常是虚函数

fatherClass *p = new sonClass();  //用父类指针指向子类对象时
d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值