当前位置: 首页 > news >正文

C++基础知识学习记录—多态

1、函数覆盖

函数覆盖也被称为函数重写,类似于函数隐藏函数覆盖是多态的前提条件之一

函数覆盖与函数隐藏的区别:

● 基类的被覆盖函数需要使用virtual关键字修饰,表示这个函数是一个虚函数
在Qt Creator中虚函数是斜体

虚函数的特点如下:

1、 虚函数具有传递性,当基类的某个成员函数为虚函数,派生类中的新覆盖函数(函数名称相同、参数列表相同、返回值类相关)也自动称为虚函数。

2、只有非静态成员函数可以设置为虚函数

3、如果函数声明定义分离,只需要在声明处使用virtual关键字

4、构造函数不能设置为虚函数,但是析构函数可以

2、多态的基本使用

多态是面向对象的三大特性之一,即“一个接口,多种状态”体现的是功能扩展的思想,程序在运行时根据类型的不同自动选择不同的决策方式。多态主要用于接口的设计。

多态的使用条件:

● 基类与派生类之间使用公有继承

● 基类与派生类之间要有函数覆盖

● 基类引用/指针指向派生类对象

3、虚析构函数

当基类指针或引用指向派生类对象时,对象销毁时可能会导致派生类的析构函数无法被调用,造成内存泄漏。

 解决方案是: 将基类的析构函数设置虚函数。

 建议一个类只要有作为基类的可能,就把其析构函数设置为虚析构函数。

4、抽象类 abstract

抽象类

1、抽象类只能作为基类,不能初始化对象

2、抽象类一定有纯虚函数,有纯虚函数的类一定是抽象类

纯虚函数是一个特殊的虚函数,没有函数体 语法: virtual void 函数名() = 0 ;

3、抽象类是给派生类提供算法框架。

//注意:1、派生类没有实现所有抽象基类的纯虚函数,这样的派生类也是一个抽象类。

//2、抽象类一定会作为其他类的基类,其析构函数必须设置为虚函数,因此抽象类可以支持多态。

 

相关文章:

  • 赛前启航 | 三场重磅直播集结,予力微软 AI 开发者挑战赛!
  • Redis分布式锁故障处理:当Redis不可用时的应对策略
  • 计算机网络与通讯知识总结
  • 如何在WordPress网站中查看移动版本—快速预览与自定义设置
  • 深入浅出ES6:现代JavaScript的基石
  • flask后端开发(8):Flask连接MySQL数据库+ORM增删改查
  • MongoDB03 - MongoDB索引,事务和安全
  • 2025年2月科技热点深度解析:AI竞赛、量子突破与开源革命
  • 图论算法篇:BFS宽度优先遍历
  • 考研/保研复试英语问答题库(华工建院)
  • 学习路程二 LangChain基本介绍
  • Docker基础实践与应用举例
  • Redis——用户签到BitMap,UV统计
  • Css3重点知识讲解
  • Mysql的数值类型
  • GEO数据结构
  • SpringSecurity的核心过滤器-CsrfFilter
  • Qt如何将数据传入labview,Qt又如何从labview中读取数据?
  • 利用python和gpt写一个conda环境可视化管理工具
  • 网络安全系统概述 网络安全系统分为几级
  • 《歌手2025》公布首发阵容,第一期就要淘汰一人
  • 中哥两国元首共同见证签署《中华人民共和国政府与哥伦比亚共和国政府关于共同推进丝绸之路经济带和21世纪海上丝绸之路建设的合作规划》
  • 台行政机构网站删除“汉人”改为“其余人口”,国台办回应
  • 北斗专访|特赞科技范凌:现在AI主要是“说话”,接下来要“干活”了
  • 特朗普开启第二任期首次外访:中东行主打做生意,不去以色列
  • 人民币对美元即期汇率盘中创半年新高,离岸市场升破7.2