C++的virtual

本文介绍了函数重写的基本概念,包括子类如何通过重写父类的方法来修改继承行为,以及如何通过父类指针调用子类的重写方法。此外,还详细解释了虚函数的作用和用法,并探讨了纯虚函数的概念及其在抽象类中的应用。

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

函数的重写:
当子类定义了与父类一模一样的函数时,子类定义的函数将会覆盖父类继承过
来的函数,称之为重写。
如果子类重写了父类继承过来的函数,但是又想调用已经被覆盖的父类函数,
那么可以使用 parent(父类名)::(被覆盖的父类函数)
如: parent::test();    实现调用父类的函数

父类指针指向子类对象:
从语法本质讲,子类对象的前半部分就是父类(从父类继承的数据),因而可
以将子类对象的指针直接转化为父类。
注意:当父类指针指向子类对象时,而且子类对象函数又重写了继承过来的父
类函数,那么父类指针调用重写函数时,调用的是哪个类的函数? 父类
所以,当一个成员函数需要子类重写,那么在父类应该将其声明为virtual,
称之为虚函数,那么就能执行子类的函数,而不是父类的。
virtual的作用:根据对象的实际类型,调用相应类型的函数,也就是说即使
父类指针指向子类对象,也会根据子类对象指向子类函数,而不是跳转到父类
执行函数。

父类被重写的函数未加virtua,运行父类的test父类被重写的函数加上virtual,运行子类的test()函数

 注:virtual在函数中占4个字节,无论定义多少个virtual声明,加起来依旧只占4个字节。

纯虚函数:
1.将成员函数声明为virtual
2.函数声明后加上 =0
3.该函数没有函数体
例如:virtual void test(char *test) = 0;
只要有纯虚函数,那么这个类就是抽象类(或称纯虚类),抽象类不能够被实
例化,即无法创建该对象。实际用途:充当“接口规范”,相当于Java中
interface语法,用于替代C中的回调函数语法
接口规范:凡是遵循此规范的类,都必须实现指定的函数接口。通常指一系列接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值