多态(C++)

一、(1)编译时(静态)  函数重载,函数模板

(2)运行时(动态)    重点

二、多态的定义及实现

1.构成条件

多态是一个继承关系下的类对象,去调用同一函数,产生不同的行为

1.1必须重要条件

a.必须是基类(父类)的指针或引用调用函数

b.被调用的函数必须是虚函数

其中基类的virtual可以不写,但是不建议,而且这也是考试的埋坑处

1.2虚函数的重写/覆盖:基类中有一个跟派生类完全相同的虚函数(即返回值类型,函数名字,参数列表(指类型int,char...))也称三同

接下来我们看一道知道答案想给面试官背后来个板砖的题

这里按照常规思路,调用test(),而父子类func构成多态(与参数的值无关,类型相同即可),

那么大部分人都会觉得是A->1,这就调到的出题人的坑里,这就考验大家在平时对于细节的掌握,其实构成多态是形成如下的函数

由于大部分例子都是参数的值也相等,所有大部分人会忽略这个细节,所有答案其实是B->1.

那如果是这呢

这里是子类的指针,所以不构成多态,故只是函数的调用

对了

当B的指针传入test中时,是A* this这也是大家需要注意的地方。

1.3协变

派生类重写基类函数时,与基类函数返回值类型不同,即基类的虚函数返回基类的指针或引用,而派生类返回派生类的指针或引用。

协变意义不大,不建议使用

1.4析构函数的重写

基类的析构函数为虚函数,此时派生类析构函数只需要定义,无论是否加virtual,虽不符合重写的规则,实际上编译器对析构函数的名称做了特殊处理,编译后析构函数的名称统一处理成destructor,故基类加virtual,就构成了重写。如果~A()不加virtual,那么delete p时,只调用A的析构,没有调用B的析构,导致内存泄漏,这是因为~B()在释放资源。

这里有两次A的析构的原因在继承中我们已经详细讲解过了,子类会自动调用父类的析构

所以这里建议基类的析构设计成虚函数

1.5override和find

在派生类重写后面加override,用来检查函数名是否相同,如果我们不想让派生类重写这个虚函数,用final修饰

1.6相同函数名之间的关系

再看一道例题

答案是12,只要有虚函数,就需要考虑虚表指针(独立),其在32位下是4字节,64位下是8字节

2、纯虚函数和抽象类

在虚函数后面加上=0,不需要定义实现,只要声明即可。包含虚函数的类叫做抽象类,抽象类不能实例化出对象

3、虚函数表

1>基类对象的虚函数表中存放所有虚函数的地址

2>派生类由两部分构成,继承下来的基类和自己的成员,一般情况下,继承下来的基类中有虚函数表指针,自己就不会再生成虚函数表指针。但是要注意的是这里继承下来的基类部分虚函数表指针和基类对象的虚函数表指针不是同一个,就想基类对象成员和派生类对象中的基类对象成员也独立

3>派生类中重写的基类的虚函数,派生类的虚函数就会被覆盖为派生类重写的虚函数地址

4>派生类的虚函数表中包含:基类的虚函数地址,派生类重写的虚函数地址,派生类自己的虚函数地址

5>虚函数表本质是一个存虚函数指针的指针数组

6>虚函数和普通函数一样,编译好后是一段指令,都是存在代码段的,只是虚函数的地址又存到了虚表中

7>C++标准中并没有严格规定虚函数表存在在哪

4、静态绑定和动态绑定

a.对不满足多态条件(指针或引用+调用虚函数)的函数调用是在编译时绑定,也就是编译时确定调用函数的地址,叫做静态绑定

b.满足多态条件的函数调用是在运行绑定,也就是在运行时指向对象的虚函数表中找到调用函数的地址,也叫做动态绑定

Read more

TRAE vs Qoder vs Cursor vs GitHub Copilot:谁才是真正的“AI 工程师”?

引言:工具选择 = 成本 + 效率 + 风险 的综合权衡 2026 年,AI 编程工具已从“玩具”走向“生产主力”。但面对 TRAE、Qoder、Cursor、GitHub Copilot 等选项,开发者不仅要问: * 它能写 Rust 吗?支持中文需求吗? * 更要问:一个月多少钱?团队用得起吗?代码安全有保障吗? 本文将从 五大核心维度 深度剖析四大主流 AI IDE: 1. 核心理念与自主性 2. 多语言与跨生态支持能力 3. 工程化与交付闭环能力 4. 中文本地化与业务适配 5. 收费模式、定价策略与企业成本 帮你做出技术可行、经济合理、风险可控的决策。 一、核心理念:

By Ne0inhk

Cogito-v1-preview-llama-3B应用场景:工业设备故障日志分析与维修建议生成

Cogito-v1-preview-llama-3B应用场景:工业设备故障日志分析与维修建议生成 1. 工业设备运维的痛点与机遇 在工业制造领域,设备故障是每个工厂管理者最头疼的问题。一台关键设备的突然停机,可能导致整条生产线瘫痪,每小时损失数以万计。传统的故障排查方式往往依赖经验丰富的老师傅,通过查看设备日志、听声音、摸温度来判断问题所在。 但这种传统方式面临三大挑战:人才断层(老师傅越来越少)、响应延迟(排查需要时间)、经验局限(个人经验有限)。现在,借助Cogito-v1-preview-llama-3B这样的智能模型,我们可以让设备运维进入智能化时代。 Cogito v1预览版是Deep Cogito推出的混合推理模型,在标准基准测试中超越了同等规模的其他开源模型。它不仅能直接回答问题,还能进行自我反思和推理,特别适合处理工业设备故障日志这类复杂的技术问题。 2. Cogito模型的独特优势 2.1 混合推理能力 Cogito模型最大的特点是混合推理能力。当面对设备故障日志时,它不会简单地匹配关键词,而是会: * 先理解:分析日志中的技术术语和上下文关系

By Ne0inhk
GitHub 热榜项目 - 日榜(2026-1-10)

GitHub 热榜项目 - 日榜(2026-1-10)

GitHub 热榜项目 - 日榜(2026-1-10) 生成于:2026-1-10 统计摘要 共发现热门项目: 12 个 榜单类型:日榜 本期热点趋势总结 本期GitHub热榜显示AI智能体开发工具正席卷开发者社区,Claude Code、opencode等项目通过自然语言交互极大提升编码效率,Chrome DevTools MCP和UI-TARS-desktop则推动多模态智能体与开发工具深度集成,同时TailwindCSS持续领跑前端工具链,NetBird提供现代化安全网络方案,反映出开发者正积极采用AI助手优化工作流,并重点关注智能体工具链集成、实用型开发工具及基础设施安全三大趋势,这些高质量开源方案切实提升了开发体验与工程效率。 1. ChromeDevTools/chrome-devtools-mcp * 🏷️ 项目名称:ChromeDevTools/chrome-devtools-mcp * 🔗 项目地址: https://github.com/ChromeDevTools/chrome-devtools-mcp * ⭐ 当前 Star 数:

By Ne0inhk
AtomGit首发模型深度评测:多模态能力与场景适配性实战分析

AtomGit首发模型深度评测:多模态能力与场景适配性实战分析

文章目录 * 每日一句正能量 * 前言 * 一、评测背景与方法论 * 1.1 评测动机 * 1.2 评测环境 * 1.3 评测框架 * 二、核心能力深度测试 * 2.1 文本生成质量评测 * 2.2 代码能力实测 * 2.3 逻辑推理能力 * 三、性能表现实测数据 * 3.1 响应延迟测试 * 3.2 长上下文处理能力 * 3.3 输出稳定性 * 四、场景适配性分析 * 4.1 中文场景优化 * 4.2 垂直领域表现 * 4.3 API易用性 * 五、综合评估与优化建议 * 5.

By Ne0inhk