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

C加加面向对象的知识点

C面向对象1.什么是面向对象面向对象有哪些特性2. C面向对象编程3. 重载重写隐藏的区别是什么4. C的多态是什么怎么通过虚函数实现5. C函数对象是什么跟普通函数区别是什么1.什么是面向对象面向对象有哪些特性面向对象是指将一个具体事务抽象成类类里面有数据成员变量和具体动作成员函数。面向对象的三大特性(1). 封装将数据成员变量和实现方法成员函数绑定在一个独立的类中隐藏其内部实现细节只对外提供安全有限的访问接口。// 实现完全的读写控制classSecureData{private:std::string secret;public:// 只读接口conststd::stringgetSecret()const{returnsecret;}// 特殊权限写入接口voidsetSecret(conststd::stringnewVal,intauthCode){if(authCode12345){// 简单模拟权限检查secretnewVal;}}};(2). 继承通常设计一个基类/父类新的子类/派生类可以继承父类的非private成员函数和成员变量也可以对父类的成员函数进行重写但父类或父类的成员函数被final关键字修饰修饰的类不能被继承修饰的成员函数不能被重写。public继承父类中public和protected的成员继承到基类时访问属性保持原样。 protected继承父类中public和protected的成员继承到基类时访问属性全部变成protected。 private继承父类中public和protected的成员继承到基类时,访问属性全部变成private。(3). 多态多态就是不同继承类的对象对同一个动作成员函数做出不同响应实现过程基类的指针或绑定到派送类的对象使得指针呈现不同的实现方法c中多态还包括函数重载。2. C面向对象编程面向过程将一个大问题拆成一系列按顺序执行的函数或步骤。需要关注的是代码实现的步骤数据和操作方法是分离的数据通常作为参数在函数间传递。面向对象模拟现实世界将问题分解为一系列相互协作的“对象”每个对象都是包含自身属性和相关行为方法的独立实体。需要关注的是有哪些角色他们有什么能立以及之间是如何关联和协作的。3. 重载重写隐藏的区别是什么特性重载重写隐藏作用域同一个类或同名空间中基类和派生类之间基类和派生类之间函数名必须相同必须相同必须相同参数列表必须不同必须严格相同相同或不同皆可virtual关键字无关紧要基类函数必须有见下方详细规则底层机制编译时多态静态绑定运行时多态动态绑定静态绑定重载同一作用域中函数名相同参数列表不同参数个数参数顺序参数类型编译器会在编译阶段根据不同传入实参自动推导出调用哪一个函数。重写派生类替换基类中虚函数的实现。重写的三个严格条件作用域不同基类与派生类函数名参数列表严格相同基类函数必须是virtual。强烈建议在派生类重写函数后面加上override这可以让编译器检查函数是否与基类虚函数正确匹配避免因为写错参数而变成了“隐藏”。隐藏派生类的函数隐藏了基类的同名函数。触发隐藏两种情况1. 同名但参数不同无论基类同名函数是否虚函数基类函数都被隐藏。2. 同名且参数相同这时候基类同名函数没有声明virtual则基类同名函数被隐藏。4. C的多态是什么怎么通过虚函数实现多态是指“同一个指令作用于不同对象产生不同的行为”。C中的多态分为两种静态多态编译时多态通过函数重载和模板实现。编译器在编译阶段就知道调用那一份代码。动态多态运行时多态通过继承和虚函数实现代码只有运行到那一行才会根据对象的身份决定去调用哪一个函数。虚函数实现多态实现多态的三个条件存在继承关系。基类中声明了virtual并且派生类进行了函数重写。通过基类指针或引用去调用这个虚函数。底层机制虚表与虚指针虚函数表每个包含虚函数的类都会有一张虚函数表。表里存放的是该类所有虚函数的地址。如果派生类重写了虚函数那么派生类的虚函数表中的基类虚函数地址会被替换为派生类自己函数的地址。虚函数指针每个包含了虚函数对象内存中都会多出一个隐藏的指针。这个指针值向该对象所属类的虚函数表。该指针64位下8个字节。调用过程调用过程多态绑定classBase{public:virtualvoidshow(){std::coutBase class show()std::endl;}virtual~Base()default;// 虚析构确保正确释放派生类资源};classDerived:publicBase{public:voidshow()override{std::coutDerived class show()std::endl;}};intmain(){Base*basePtrnewDerived();// 基类指针指向派生类对象basePtr-show();// 实际调用派生类的show()deletebasePtr;// 通过虚析构正确释放return0;}通过基类指针调用虚函数时底层发生获取vptr程序通过指针所指对象的内存空间找到隐藏的虚函数指针。查表通过该虚函数指针找到该对象所属类的虚函数表。寻址执行根据函数在表中的偏移量找到真实的函数地址跳过去执行。5. C函数对象是什么跟普通函数区别是什么函数对象是指一个重载了 operator() 的类或结构体实列。函数对象可以像普通函数一样被调用但他们实际是对象具有状态和行为。普通函数和函数对象区别定义方式普通函数是用返回类型 函数名 (参数)语法定义的而函数对象或结构体并重载了operator()。状态普通函数无状态函数对象可以有内置的状态成员变量。调用方式普通函数直接调用函数对象需要先创建实列然后用实列调用。灵活性函数对象可以重载多个函数操作符普通函数只能定义一个函数。

相关文章:

C加加面向对象的知识点

C面向对象1.什么是面向对象?面向对象有哪些特性?2. C面向对象编程?3. 重载,重写,隐藏的区别是什么?4. C的多态是什么?怎么通过虚函数实现?5. C函数对象是什么?跟普通函数…...

HC-SR501人体感应模块的5个隐藏功能:90%的人不知道的调节技巧

HC-SR501人体感应模块的5个隐藏功能:90%的人不知道的调节技巧 当你以为HC-SR501只是个简单的人体感应开关时,它其实藏着工程师们精心设计的可编程特性。这些隐藏在电位器旋钮和跳线帽下的功能,能让模块在智能家居、安防系统中表现更精准。下面…...

使用OpenClaw的Skills对接本地系统靶

1. 流图:数据的河流 如果把传统的堆叠面积图想象成一块块整齐堆叠的积木,那么流图就像一条蜿蜒流淌的河流,河道的宽窄变化自然流畅,波峰波谷过渡平滑。 它特别适合展示多个类别数据随时间的变化趋势,尤其是当你想强调整…...

让桌面随光而动:动态壁纸的终极解决方案

让桌面随光而动:动态壁纸的终极解决方案 【免费下载链接】dynamic-wallpaper A simple bash script to set wallpapers according to current time, using cron job scheduler. 项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-wallpaper 厌倦了单调乏…...

Wan2.2-I2V-A14B开发利器:在IDEA中配置远程Python解释器进行模型调试

Wan2.2-I2V-A14B开发利器:在IDEA中配置远程Python解释器进行模型调试 1. 为什么需要远程Python解释器 当开发Wan2.2-I2V-A14B这类AI模型项目时,我们经常遇到一个典型问题:本地机器性能不足,而模型运行需要服务器级别的GPU资源。…...

Python高效处理多层嵌套文件夹中的批量NC文件——以海洋数据为例

1. 海洋数据处理中的多层嵌套文件夹挑战 第一次处理海洋数据时,我被那些层层嵌套的文件夹搞得头晕眼花。想象一下这样的场景:你的硬盘里有个名为"Argo_Data"的文件夹,打开后看到"太平洋"、"大西洋"、"印度…...

大模型到底是啥?运维人分钟搞懂(不用数学)皆

1. 流图:数据的河流 如果把传统的堆叠面积图想象成一块块整齐堆叠的积木,那么流图就像一条蜿蜒流淌的河流,河道的宽窄变化自然流畅,波峰波谷过渡平滑。 它特别适合展示多个类别数据随时间的变化趋势,尤其是当你想强调整…...

Kali Linux抓包工具Burp Suite社区版安装教程(简易上手版)

前言由于本人前段时间不小心删掉了Kali Linux上的Burp Suite社区版,后面需要用的时候,在网上参考了很多文章,均要下载和后续配置。我尝试了不少方法,不仅没有安装好,还得到了两个结论,那就是耗时和耗力。后…...

微信小程序实战:打造优雅的互动消息列表(评论 / 点赞 / 关注

在绿植类小程序开发中,互动消息模块(评论、点赞、关注)是提升用户粘性的核心场景。本文将基于实际开发场景,分享如何快速实现风格统一、交互友好的评论详情、点赞详情、关注详情列表页面,包含完整的代码实现和样式设计…...

别再死记硬背C#语法了!用5个机器视觉小例子带你快速上手(Visual Studio 2022版)

用5个机器视觉小项目玩转C#语法(Visual Studio 2022实战) 刚接触C#的开发者常陷入语法记忆的泥潭,而机器视觉领域恰好需要快速验证想法的能力。本文将带你用Visual Studio 2022创建五个渐进式图像处理项目,在解决实际问题的过程中…...

**反编译防护新思路:基于混淆+加密的C++程序加固实战**在软件安全领域,**反编译防护**始终是开发者绕不开

反编译防护新思路:基于混淆加密的C程序加固实战 在软件安全领域,反编译防护始终是开发者绕不开的核心议题。尤其是对于c这类静态编译语言,虽然相比Java或Python难以直接反编译出源码,但其二进制文件仍可通过IDA Pro、Ghidra等工具…...

打通智能体孤岛:用 AgentRun 构建生产级 AA 多 Agent 管理协作系统僦

起因是我想在搞一些操作windows进程的事情时,老是需要右键以管理员身份运行,感觉很麻烦。就研究了一下怎么提权,顺手瞄了一眼Windows下用户态权限分配,然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧&#xff…...

nanobot 源码解析(五):Skills 系统——让 AI 秒变专家敢

一、中间件是啥?咱用“餐厅”打个比方 想象一下,你的FastAPI应用是个高级餐厅。 ?? 顾客(客户端请求)来到门口。- 迎宾(CORS中间件):先看你是不是从允许的街区(域名)来…...

多模型场景下的成本治理指标体系幢

为 HagiCode 添加 GitHub Pages 自动部署支持 本项目早期代号为 PCode,现已正式更名为 HagiCode。本文记录了如何为项目引入自动化静态站点部署能力,让内容发布像喝水一样简单。 背景/引言 在 HagiCode 的开发过程中,我们遇到了一个很现实的问…...

多线程UI异常捕获实战 --- 解决Invoke与BeginInvoke的窗口句柄陷阱

1. 多线程UI编程的窗口句柄陷阱 刚接触Windows Forms多线程开发时,我经常遇到一个让人抓狂的错误:"在创建窗口句柄之前,不能在控件上调用Invoke或BeginInvoke"。这个错误就像个幽灵,有时候程序运行几天都不出现&#xf…...

企业官网设计那个最好?怎么才能融入品牌文化的视觉设计与前端落地

企业官网设计:如何通过视觉设计与前端技术深度融入品牌文化 企业官网设计不仅是信息窗口,更是品牌文化的立体化载体。优秀的官网设计需实现美学表达、用户体验与品牌内核的三维统一,本文将系统解析设计策略与落地路径。 推荐选择https://ww…...

【Linux命令饲养指南】01-Linux命令三巨头:pwd、cd、ls,看完这篇你就会了!(附带目录结构大揭秘)

hello 各位老铁,又是学习新知识的时候啦😊 咱们刚接触Linux,看着黑乎乎的终端一脸懵?别慌,今天我们用大白话去搞定最常用的命令和Linux的目录结构。本文为个人原创学习整理,AI 仅辅助排版与润色一、Linux的…...

运动声源的到达结构仿真

概要 运动声源的到达结构仿真中,由于声传播速度远高于声源运动速度,而且声源辐射出声波后,介质的振子传递声波几乎不受声源影响,因此可以将根据每个时间帧的声源位置,使用bellhop计算到达结构,数字离散采样…...

.Acwing基础课第题-简单-区间和胰

在AI辅助开发的语境下,Skill就是一个包含了领域知识、最佳实践、代码模板的知识包。 以"DAO层CRUD生成"为例,一个Skill包含: /mnt/skills/dao-crud/ ├── SKILL.md # 使用说明 │ ├── 何时使用这个Skill │ …...

VRRP实验练习

要求LSW1配置<Huawei> <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sys sw1 [sw1]v [sw1]vlan b [sw1]vlan batch 10 20 Info: This operation may take a few seconds. Please wait for a moment...done. [sw1]interface g 0/0/1 [sw…...

如何在macOS上快速定制个性化光标:Mousecape完全指南

如何在macOS上快速定制个性化光标&#xff1a;Mousecape完全指南 【免费下载链接】Mousecape Cursor Manager for OSX 项目地址: https://gitcode.com/gh_mirrors/mo/Mousecape 厌倦了macOS默认的单调鼠标指针&#xff1f;想要让光标更有个性、更符合你的审美&#xff1…...

【java工程师快速上手go】二.Go进阶特性

目录 写在前面 一、面向对象编程 1.1 结构体&#xff1a;Go的"类" 1.2 匿名字段与嵌入 1.3 结构体的组合优势 1.4 接口&#xff1a;鸭子类型的魅力 1.5 空接口与类型断言 1.6 接口组合 1.7 封装&#xff1a;大小写可见性 二、并发编程核心 2.1 Goroutine&…...

回调地狱+Promise+ES6

JavaScript 异步机制与异步编程终极指南 &#xff08;完整梳理&#xff1a;回调地狱成因 → 事件循环原理 → Promise/async/await 实战 → axios 封装&#xff09; 一、异步编程核心背景&#xff1a;为什么异步是必然&#xff1f; 1. JS 单线程本质&#xff08;异步的根源&…...

如何在Windows系统下完全解锁MacBook Pro Touch Bar:终极解决方案指南

如何在Windows系统下完全解锁MacBook Pro Touch Bar&#xff1a;终极解决方案指南 【免费下载链接】DFRDisplayKm Windows infrastructure support for Apple DFR (Touch Bar) 项目地址: https://gitcode.com/gh_mirrors/df/DFRDisplayKm 还在为Windows系统下Touch Bar只…...

下篇:欠拟合——那个还没开始就放弃的“躺平族”

一、欠拟合有什么作用&#xff1f;——它是个“最低标准报警器” 先说直白点&#xff1a;欠拟合本身不是好事&#xff0c;但“发现欠拟合”这件事非常有用。作用1&#xff1a;它是模型复杂度的“下限检测器” 你训练一个模型&#xff0c;发现训练集准确率只有55%&#xff08;而…...

别再迷信仿真!实测STM32的3.3V PWM也能驱动IR2104(附完整代码与波形分析)

实测揭秘&#xff1a;STM32的3.3V PWM驱动IR2104全攻略 在嵌入式硬件开发中&#xff0c;仿真工具常被视为"真理标准"&#xff0c;但真实电路往往给我们上生动一课。最近遇到一个典型案例&#xff1a;使用STM32的3.3V PWM信号驱动IR2104半桥驱动器时&#xff0c;仿真…...

Gitee本土化战略深度解析:中国开发者生态的“新基建“ Gitee本土化战略深度解析:中国开发者生态的“新基建“

在数字化转型浪潮席卷全球的当下&#xff0c;代码托管平台作为软件开发的基础设施&#xff0c;其战略价值日益凸显。Gitee作为中国本土领先的代码托管平台&#xff0c;凭借其独特的本土化优势&#xff0c;正在重塑国内开发者的协作生态。与GitHub等国际平台相比&#xff0c;Git…...

新浪舆情通:数据大屏让信息一目了然

新浪舆情通&#xff1a;数据大屏让信息一目了然网络时代&#xff0c;面对海量数据&#xff0c;如何快速发现重要信息、准确判断发展态势、及时开展分析研判&#xff1f;新浪舆情通数据大屏&#xff0c;通过多维数据的可视化大屏&#xff0c;将复杂的数据转化为直观的分析图表&a…...

内存测试指标和工具

1.dmidecode作用&#xff1a;把系统BIOS中的硬件信息提取出来使用方法dmidecode | grep "Configured Memory Speed"这个示例用于查看内存实际频率&#xff0c;内存实际频率代表了内存处理数据的速度实际项目中会告诉你测试1DPC还是2DPC&#xff0c;这里的DPC&#xf…...

Spring IOC 源码学习 事务相关的 BeanDefinition 解析过程 (XML)感

从0构建WAV文件&#xff1a;读懂计算机文件的本质 虽然接触计算机有一段时间了&#xff0c;但是我的视野一直局限于一个较小的范围之内&#xff0c;往往只能看到于算法竞赛相关的内容&#xff0c;计算机各种文件在我看来十分复杂&#xff0c;认为构建他们并能达到目的是一件困难…...