C++基础2

2、CPP 基础语法学习 很多语法点从汇编角度分析就很明了了 加油一、基础语法 A1、cin、cout2、函数重载(Overload)3、默认参数4、extern "C"C 和 C++混合开发二、基础语法 B5、内联函数 (inline function)窥探内敛函数的本质:内联函数与宏表达式6、 const7、引用(Reference)引用的本质三、汇编语言1、学习汇编指令的 2 大知识点:2、内联汇编3、汇编指令mov 指令call 指令lea指令(指针)ret、add、sub、inc、dec、xorjmp常见代码的汇编4、. 阅读详情

运算符重载


运算符重载,就是对已有的运算符进行重定义,赋予其另一种功能, 以适应不同的类型

加号运算符重载

如果想让自定义数据 进行+ 号运算, 那么就需要重载+号运算符
在成员函数里面或者全局函数里 重写一个+运算符的函数
函数名operator+(){}
运算符重载也可以提供多个版本

重载左移运算符
  1. 不要随意卵用符号重载
  2. 内置数据类型的运算符不可以重载
  3. cout<<直接对Person 自定义数据类型 进行输出
  4. 写到全局函数中
ostream &  operator<<(ostream &cout,Person &p1) //第一个参数cout,第二个参数Person
{
	cout << "m_A = " << p1.m_A << "   M_b = " << p1.m_B;
	return cout;
}
  1. 如果访问的时候要访问p1的私有 成员, 那么全局函数要做友元函数
前置 后置 ++ 运算符重载
1. 自己实现int类型  MyInterger
  1. 内部维护以int数据
  2. MyInterger myInt
  3. myInt++ 后置 ++myInt operator++()前置 operator(int) 后置
  4. 前置理念, 先++, 后返回自身,, 后置理念, 先保存原有值 内部++,再返回临时数据
智能指针实现

Person 类有 showAge 成员函数
如果 new出来的Person对象就要让程序员自觉的去释放 delete
如果有了智能指针,让智能指针托管这个person对象,对象的释放就不用吵醒了,让智能指针管理
为了让智能指针像普通的Person* 指针一样使用,就要重载-> 和*

赋值运算符重载
  1. 系统默认给类提供, 赋值运算符写法 是简单值拷贝
  2. 导致如果类中有指向堆区的指针, 就可能出现深拷贝浅拷贝问题
  3. 所以要重载=运算符
  4. 如果系统用链式编程 return *this
[]运算符重载
  1. 返回数组索引的引用
  2. int & operator[](int index)
  3. return this->pAddress[index]
关系运算符重载
  1. 自定义数据类型 不会内部做比较 == !=
  2. 所以要重载!= ==
函数调用重载
  1. () 仿函数 对象()看似像函数调用
  2. MyAdd() 匿名对象
  3. 不要重载 &&和||
强化训练 - 字符串封装
  1. cout 输入自定义的字符串
  2. cin 让用户输入字符串内容
  3. 重载 = 运算符
  4. 重载+ 运算符
  5. 重载[]运算符
  6. 重载==运算符

继承和派生

  1. 网页有很多 公共部分
  2. 导致实现有很多重复的代码
  3. 引出集成, 基类 公共网页
  4. 具体子类不同的内容方式
  5. 语法 class 子类 :Public 父类
继承方式

基类中的私有属性不可以被继承

继承中的对象模型

子类会继承父类中所有内容, 包括私有属性
只是我们访问不到, 被编译器所隐藏

继承中的析构和构造函数
  1. 子类创建对象时, 先调用父类的构造, 然后调用自身的构造
  2. 析构函数与构造函数顺序相反
  3. 子类是不会继承父类的构造函数和析构函数
  4. 补充内推, 如果父类没有合适的默认构造, 那么子类可以采用初始化的方式显示调用父类的其他构造
继承中的同名处理
  1. 成员属性 直接调用子类, 如果想调用父类, 需要作用域
  2. 成员函数 直接调用子类, 父类的所有版本都会被隐藏, 除非显示用作用域运算符去调用
继承中静态成员的处理
  1. 类似非静态成员函数处理
  2. 如果想访问父类中的成员,加作用域即可
多继承

多继承容易引发二义性问题
class A:public B,public C2 …
如果想解决需要作用域

菱形问题以及解决
解决问题利用虚基类
sheepTUo内部类
  1. vbptr 虚基类指针
  2. 指向一张 虚基类标
  3. 通过表找到偏移量
  4. 找到共用数据
    内部工作原理(可以不掌握)

多态

多态是面向对象程序设计中数据抽象和继承之外的第三个基本特征

静态连编和动态编译
  1. 多态分类
    1.1. 静态多态 函数重载
    1.2. 动态多态 虚函数, 继承关系
  2. 静态连编
    地址早绑定, 编译阶段绑定好地址
    地址晚绑定,再运行时候再绑定
  3. 多态
  4. 父类的引用或指针指向子类对象 虚函数表指针
  5. 虚函数表, &对象的函数地址,将vfptr继承下来, 指向自己,覆盖掉,子类重写虚函数,重写返回值,,参数,类型都一致。
多态原理解析

当 父类中有了虚函数之后, 内部结构发生了变换
内部多了一个vfprt
virtual function pointer 虚函数表指针
指向vftable 虚函数表
父类结构 vfpter
子类中继承会继承虚函数表指针, 以及虚函数表
如果发生了重写,会替换掉虚函数表中原有的函数地址
,改为自己实现的方法。

深入剖析, 内部如何实现调用
(void(*)()) (*(int*)*(int*)animal())

c++基础2 注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;在c++中的输出其实是 阅读详情

相关推荐

2 基础【C++】

C++ PTA

小心星的博客 1098

零基础上手keras2cpp:C++新手也能看懂的神经网络移植教程

**keras2cpp**是一个将Keras神经网络模型移植到纯C++环境的实用工具,特别适合希望在C++项目中部署深度学习模型的开发者。本文将通过简单易懂的步骤,带您快速掌握如何将Keras模型转换为C++代码并运行,即使您是C++新手也能轻松上手! ## 📌 为什么选择keras2cpp? 在深度学习项目中,我们通常使用Python和Keras快速构建和训练模型,但部署时可能需要更高性

gitblog_01200的博客 957

从汇编到C++的桥梁:asm2cpp转换工具

本文还有配套的精品资源,点击获取 简介:本文探讨了如何将x86汇编语言转换为C++代码,强调了在特定场合汇编语言的重要性,并通过asm2cpp工具简化了转换过程。转换过程包括语法解析、指令映射、标签处理、预处理器宏的使用以及内存模型的处理。虽然转换后的C++代码具有更好的可读性和可维护性,但可能会丢失某些汇编特性,因此转换需要深思熟虑。 1. x86汇编语言基础 ...

weixin_42360733的博客 1913

CPP基础2

函数1.普通函数定义int add(int x, int y); int a = 2; add(a) int x形参不占用内存 实参 a 给形参初始化后,形参才分配内存 形实结合有值调用和引用 值调用就是传递数值 引用传递地址 实际应用举例引用void swap(int &x) { x = 4; } int a = 5; swap(a); swap(1);//错误引用必须传地址,void

renzhe20092584的专栏 615

手把手教你用Qt5打造二次元游戏启动器(附鸣潮同款UI源码)

本文详细介绍了如何使用Qt5框架从零开始构建一个功能完整、UI风格贴近《鸣潮》的二次元游戏启动器。教程涵盖无边框窗口、动态背景、自定义控件绘制、多线程资源加载以及下载管理等核心模块的实现,并提供了可运行的源码参考,帮助C++开发者和Qt爱好者深入掌握现代桌面应用开发技术。

weixin_29291863的博客 265

Flink CDC 1.18.1 Oracle 数据同步到postgresql

8、修改Flink的配置文件,主要是各种服务的绑定地址,默认为localhost,统统改为0.0.0.0,如:rest.address: 0.0.0.0 #localhost。将flink-sql-connector-oracle-cdc-3.0.1.jar复制到flink-1.18.1/lib目录中。6、下载 flink-connector-jdbc-3.1.1-1.17.jar,postgresql-42.7.3.jar。7、安装postgresql就不说了,相信你已经有了数据库了。

ynzhangyao的专栏 1800

CPP基础(2)

传递参数时 采用引用引用很容易与指针混淆,他们之间有三个主要的不同:①不存在空引用 ,引用必须连接到一块合法的内存②一旦引用被初始化为一个对象,就不能被指向另一个对象,指针可以在任何时候被指向到另一个对象。③引用必须在创建时被初始化,指针可以在任何事件被初始化④官方没有明确说明,但是引用确实不是传统意义上的独立变量当返回一个引用时,要注意被引用的对象不能超过作用域,所以返回一个对局部变量的引用是不合法的,但是可以返回一个对静态变量的引用。①重载相等的运算符operator==

m0_65107465的博客 1068

别再死记公式了!用HFSS/CST手把手教你仿真一个2.4GHz WiFi的PIFA天线(附参数调试技巧)

本文详细介绍了使用HFSS和CST仿真软件设计2.4GHz WiFi PIFA天线的全流程,包括建模准备、分步操作指南和参数调试技巧。通过可视化结果和实战案例,帮助工程师快速掌握天线设计的关键参数优化方法,提升辐射性能和工作效率。

weixin_31682031的博客 336

CPP2-基础部分(1)

参考自《c++ primer plus》《c++ primer 5th zh》、《The C++ Programming Language 4th Ed》

shouhuxianjian的专栏 1459

DDR内存Prefetch机制详解:从DDR1到DDR4的技术演进与性能提升

本文深入解析DDR内存Prefetch机制从DDR1到DDR4的技术演进与性能提升。通过分析Prefetch技术的实现原理与Burst传输的协同机制,揭示DDR1的2n Prefetch、DDR2的4n Prefetch、DDR3的8n Prefetch以及DDR4的Bank Group架构创新如何显著提升内存带宽与系统性能。

weixin_30369041的博客 540

Yolov5 多边形标签转换,所有json文件自动转成txt格式[详细过程]

注:labelme是麻省理工(MIT)的计算机科学和人工智能实验室(CSAIL)研发的图像标注工具,人们可以使用该工具创建定制化标注任务或执行图像标注,项目源代码已经开源。通过labelme对图进行标注后,得到的是json文件,而Yolov5对数据进行模型构建的时候,读取需要的是txt格式的文件。txt_outer_path——保存txt文本的文件夹的绝对路径。json_name——json_name是json文本的名字。json_floder——读取json的文件夹的绝对路径。

Pandas_007的博客 1万+

cpp基础(2)

cpp基础2

lain2002的博客 375

伯德图逆向工程:用MATLAB从扫频数据中提取系统特性的5个关键步骤

本文详细介绍了使用MATLAB从扫频数据中提取系统特性的5个关键步骤,包括数据预处理、频响特性提取、相位解缠绕、系统特性反演和结果验证。通过伯德图逆向工程技术,工程师可以有效分析黑箱系统的频率响应特性,解决噪声干扰和相位跳变等实际问题,提升控制系统调试效率。

weixin_29081163的博客 199

ROS2 C++ 调参——( 1 ) Param基础命令 和 如何配置 configs.yaml

Param基础命令 和 如何配置 configs.yaml

2203_76027118的博客 3507

12、硬件工程师笔试面试——MOS管(2025版本)

在设计和测试过程中,可以参考相关的EMC测试标准和指南,如CE认证EMC电磁兼容测试介绍 和电磁兼容性(EMC)测试方法与整改指南 ,以及电磁兼容(EMC)的标准与测试内容 ,来确保MOSFET的EMC性能符合行业标准。在高频应用中,MOSFET的开关速度对电路的整体性能至关重要。是一款高电压同步N沟道MOSFET驱动器,具有自举电源电压至114V的能力,宽VCC电压范围,自适应贯通保护功能,以及高达1.4A的峰值顶端栅极上拉电流,适用于分布式电源架构、汽车电源、高密度电源模块和电信系统等应用。

XU157303764的博客 7093

[实践篇]13.13 再来梳理一下HAB的设计原理

HAB全称为Hypervisor Abstraction,即硬件抽象,主要用于提供对HOST OS硬件资源的访问。

从0到1,突破自己 7260

CPP 基础学习2

c++

wade1010的专栏 212

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++零基础到工程实战(2.5):cpp 的 auto 自动类型推导

本文详细介绍了C++11引入的auto关键字及其使用要点。auto通过编译器自动推导变量类型,简化代码书写,特别适用于复杂类型场景。主要内容包括:auto必须初始化、会保留表达式结果类型、默认忽略顶层const特性,以及与常量、强制类型转换的配合使用。文章对比了=和{}初始化的异同,指出花括号初始化更严格,能防止缩窄转换。最后强调auto虽简化代码但仍遵循严格的类型规则,建议工程中合理使用auto以提高代码可维护性。

冰冻三尺非一日之寒 396

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

《QT6/C++开发指南》2GUI程序设计基础/可视化UI设计/案例2-2

通过函数名称将信号和槽关联。

summer__7777的博客 418

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ROS 2 Bag文件C++读取实践:从基础API到性能优化全解析

在机器人开发与数据处理中,数据序列化与反序列化是核心基础技术,它决定了系统间数据交换的效率和可靠性。ROS 2采用CDR等序列化格式,将复杂的消息结构转换为二进制流进行存储与传输,其原理在于通过统一的接口描述语言定义数据结构,实现跨语言、跨平台的数据兼容。这项技术的价值在于支持机器人系统中多传感器、多节点间海量数据的高效记录与离线分析,是算法验证、数据回放和系统调试的基石。典型的应用场景包括自动驾驶的传感器数据回放、工业机器人的轨迹复现以及科研中的算法性能评估。本文聚焦于ROS 2 Bag文件这一特定数据载

weixin_29611239的博客 234

C++零基础到工程实战(1.2):cpp从源代码到可执行文件及每种文件作用

本文详细讲解了C++程序从源代码到可执行文件的完整生成流程。首先介绍了.cpp源文件和.h头文件的作用,以及编译后生成的.obj目标文件和最终.exe可执行程序的关系。重点阐述了五个关键步骤:预处理(处理宏和头文件)、编译(转汇编代码)、汇编(生成机器码)、链接(合并目标文件)和最终执行。通过分析HelloWorld示例,说明了一个C++程序需要经过预处理、编译、汇编、链接才能生成可执行文件,并强调了main函数的唯一性和.pdb调试文件的作用。掌握这一流程有助于开发者理解C++程序的构建过程,为后续工程开

冰冻三尺非一日之寒 520

C++基础语法2

本篇学习笔记介绍了 C++ 中的变量和数据类型,将变量比作“箱子”,详细讲解了整数类型(int、long long)和浮点数类型(float、double)的使用场景及命名规则。通过实际代码示例,演示了变量的赋值、计算圆形泳池体积、平均分数、最终成绩以及字符运算等操作。帮助初学者掌握变量声明、数据类型选择及基本编程技巧,为后续学习打下坚实基础

overload100的博客 994

python2cpp :帮助Python开发者轻松入门C++

python2cpp :帮助Python开发者轻松入门C++ 项目介绍 在编程语言的世界中,Python因其简洁易懂的语法和丰富的库资源,深受开发者的喜爱。然而,在某些性能敏感的应用场景中,C++由于其高效的执行速度和底层操作的灵活性,成为了更好的选择。对于熟悉Python的开发者来说,如何快速掌握C++,成为了进入新领域的关键。python2cpp项目应运而生,旨在帮助有一定Python基础的程...

gitblog_00473的博客 595

《QT6/C++开发指南》2GUI程序设计基础/代码化UI设计/案例2-3

【代码】QT6C++ 案例2_3。

summer__7777的博客 304

【重走C++学习之路】2、C++基础知识

七千字长文,帮助初学者快速上手C++,了解基本的C++知识,为后续的学习打下基础。

MeiYu_123的博客 1240
上一篇: C++基础第一部分
下一篇: C++基础三
eilot_c
博客等级 码龄11年 902粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值