多态一些概念

本文深入探讨了C++中的多态性,解释了虚函数的实现原理,包括虚函数指针和虚表。同时,讨论了不能设置为虚函数的函数类型以及构造函数为何不能是虚函数的原因。此外,阐述了析构函数何时需要声明为虚函数以及其重要性。还介绍了纯虚函数和抽象类的概念及其在继承体系中的作用。最后,详细解析了函数重载、隐藏和覆盖的区别,帮助理解C++中这些关键概念。

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

1.什么是多态?虚函数的实现原理是什么?

多态:针对同一指令,不同对象表现不同;

虚函数实现原理:当基类定义一个虚函数时候,就会在基类对象的存储布局之中产生一个虚函数指针(vfptr),该虚函数指针指向基类自己的虚函数表(虚表),虚表中存放的是虚函数的入口地址,当派生类继承基类的时候,就会在派生类对象的存储布局中产生一个虚函数指针(vfptr),该虚函数指针指向派生类的虚函数表(虚表),该虚表存放的是派生类的虚函数入口地址。

2.不能设置为虚函数的函数有哪些?构造函数能设置为虚函数吗?为什么?

不能设置为虚函数的函数:普通函数(非类的成员函数),构造函数,析构函数,友元函数,内联函数;

构造函数不能设为虚函数,因为:1.虚函数要在不同对象中产生不同动作,而如果构造函数定义成虚函数,那么对象都没产生,更没有动作了;

2.构造函数是为了初始化对象而产生的,而虚函数是为了在不了解细节的情况下也能正确处理对象。

3.在什么情况下析构函数要设置成虚函数?为什么?

在类里定义有虚函数时,特别是类内有申请的动态内存,需要清理和释放的时候;

因为:把基类的析构函数声明为虚的,此时,系统将先执行派生类对象的析构函数,然后再执行基类的析构函数;避免了基类指针指向派生类对象时,系统只执行基类的析构函数而不执行派生类的析构函数。

4.什么是纯虚函数?什么是抽象类?抽象类的作用是什么?

纯虚函数:一种特殊的虚函数,在基类中不对虚函数给出实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做;

抽象类:只要类中含有一个纯虚函数,该类就为抽象类;

抽象类作用:作为基类来派生新类,不能创建抽象类的对象。

5.什么是重载?什么是隐藏?什么是覆盖?他们之间的区别是什么?

重载:在同一个作用域中,函数名相同,但参数的类型、个数、顺序不同,即参数列表不一样;

覆盖:发生在基类与派生类中,虚函数的名字相同,参数列表也相同;

隐藏:发生在基类与派生类中,非虚函数的名字和参数列表相同,就会隐藏基类的同名函数,而且同名数据成员也有隐藏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值