C++学习笔记(一)

python 1991年 20世纪最成功的脚本语言  入门简单 开发难度低

Lua小巧的脚本语言

JAVA  1995年诞生 C++学好学JAVA很容易           

C++  1982年基于C语言产生的,(本家尼博士)它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计

C++98 C++标准第一个版本,以模板方式重写c++标准库,引入了STL。

学习关键:写博客记录学习历程 // 画思维导图

C++入门

c++里面有63个关键字,c语言有32个关键字。

名字空间

1.名字空间可以解决函数,全局变量名重复的问题,包在不同的名字空间里的重复函数实际上就是两个完全无关的函数。

2.名字空间允许嵌套,嵌套内部和外部没有任何关系。

3.名字空间允许重名,重名的名字空间会被合并。

4.一个命名空间定义了新的作用域,命名空间中的所有内容局限于该命名空间中,它解决了C语言中只能用文件划分作用域的缺陷。

5.使用using关键字,可以引用一个名字空间,使得这个名字空间内的所有内容对自己可见。

6.如果两个名字空间里面分别有相同的两个函数,那么即使我同时用using引用了两个名字空间,那么也不会报错,除非我使用了这个函数(因为使用函数会产生歧义,也就是不知道该调用哪个)

缺省参数

 函数的参数列表中,允许存在被赋值的参数,这些参数具备以下特点:

1.如果传入了,那么会取传入的值,如果没传入,会取函数定义时被赋予的值(默认值)

2.这些参数必须位于参数列表的尾部,不能穿插

3被赋值的参数列表不能在声明和定义中同时出现,只能出现一次。缺省参数也属于函数重载。

函数重载

1.C++允许两个重名函数同时存在,但他们的参数列表不能完全相同。哪怕返回值类型不同也不可以。

2.同一个函数的不同版本。 函数重载看的是它的参数类型而不是返回值类型。

3.c语言不支持函数重载,而c++支持,这和两种语言的语言特性有关。C语言的名字修饰比较简单,只是在函数名前面加上下划线,例如int Add(int a,int b),double Add(double a,double b)在C语言里面都是_Add(),程序的运行,预处理,编译,汇编,链接,在链接阶段就会出错,产生冲突,找不到函数体。而C++的修饰规则比较复杂,不同的编译器可能底层规则也不一样,在底层出现的不是Add,而是被重新修饰过的名字,这个名字包含参数类型以及函数名,参数列表不同,则名字会不同,这就保证了名字在底层的全局唯一性,这就是为什么C++可以使用函数重载,而C语言不可以,这和语言本身的特性有关,命名规则有关。

4.若想将C++中的一个函数按照C风格来编译,可以在函数名前加extern关键字。

引用

1. 

引用与指针的区别 

  • 首先从底层实现上来说,引用是按照指针方式实现的。其实理论上来说,引用是不占用内存空间的,但是实际上编译器实现引用是const指针实现,只是对上层把这一方式屏蔽了。不过我们可以大概的认为在C++中,引用和指针的底层实现方式大概是相同的。
  • 从语法层面上来说,引用只是变量的一个别名,没有独立空间,和其引用实体共用同一块空间。
  • 引用必须初始化,但是指针没有要求。
  • 可以有空指针,但是没有空引用,也就是说引用不能为空。
  • 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体,可以通俗的理解为引用作用于只能作用于一个实体 ,但是指针不是。
  • 在sizeof中含义不同,引用结果为引用类型的大小,但指针始终是地址空间所占字节个数,在32位系统下指针是4个字节。
  • 可以有多级指针,但是没有多级引用。
  • 自加自减含义不同,引用自加自减是指自身所指的对象的加或减,而指针的自加或自减是指针向后偏移一个类型的大小。
  • 访问实体方式不同,指针需要显示解引用,引用编译器自己处理。
  • 引用比指针使用更加安全,更加高效。

一定要自己理解并概括。

内联函数

inline是一种以空间换时间的做法,省去调用函数额外开销,所以代码很长或者有循环/递归的函数不适宜用inline。 

宏的优缺点:

优点:

1.增强代码的复用性。 2.提高性能

缺点:

1.不方便调试宏 2.导致代码可读性差,可维护性差,容易误用  3.没有类型安全的检查。

分数阶傅里叶变换(Fractional Fourier Transform, FRFT)是对传统傅里叶变换的拓展,它通过非整数阶的变换方式,能够更有效地处理非线性信号以及涉及时频局部化的问题。在信号处理领域,FRFT尤其适用于分析非平稳信号,例如在雷达、声纳和通信系统中,对线性调频(Linear Frequency Modulation, LFM)信号的分析具有显著优势。LFM信号是种频率随时间线性变化的信号,因其具有宽频带和良好的时频分辨率,被广泛应用于雷达和通信系统。FRFT能够更精准地捕捉LFM信号的时间和频率信息,相比普通傅里叶变换,其性能更为出色。 MATLAB是种强大的数值计算和科学计算工具,拥有丰富的函数库和用户友好的界面。在MATLAB中实现FRFT,通常需要编写自定义函数或利用信号处理工具箱中的相关函数。例如,个名为“frft”的文件可能是用于执行分数阶傅里叶变换的MATLAB脚本或函数,并展示其在信号处理中的应用。FRFT的正确性验证通常通过对比变换前后信号的特性来完成,比如评估信号的重构质量、信噪比等。具体而言,可以通过计算原始信号与经过FRFT处理后的信号之间的相似度,或者对比LFM信号的关键参数(如初始频率、扫频率和持续时间)是否在变换后得到准确恢复。 在MATLAB代码实现中,通常包含以下步骤:首先,生成LFM信号模型,设定其初始频率、扫频率、持续时间和采样率等参数;其次,利用自定义的frft函数对LFM信号进行分数阶傅里叶变换;接着,使用MATLAB的可视化工具(如plot或imagesc)展示原始信号的时域和频域表示,以及FRFT后的结果,以便直观对比;最后,通过计算均方误差、峰值信噪比等指标来评估FRFT的性能。深入理解FRFT的数学原理并结合MATLAB编程技巧,可以实现对LFM信号的有效分析和处理。这个代码示例不仅展示了理论知识在
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值