最近在学习C++ Primer Plus 第6版,之前基础打的也不太好,好多知识都是一知半解,趁着最近使用C++,从头到尾把基础学习一下,如果有需要这本书的PDF版的可以点个关注私聊我,如果各位大佬发现我的笔记有什么错误也欢迎评论区指正,各位有更好的学习路线或进阶路线也欢迎指出!
第二章
main()函数是与操作系统间的接口
动态链接库(dll)模块、用于专用环境的程序(机器人中的控制芯片)可能会不需要main()函数,但基本上都需要。
注释:c++ //单行注释 C的/多行注释,可以跨越多行/
#include编译指令会将例如#include会将iostream文件的内容以及自己书写的源码一起发送给编译器。相当于预处理!
std::cout << “hello”;//这种方式是引用了名称空间的方法,防止封装中存在相同函数名而不知道调用哪个函数的问题,冒号前即所需要引用的版本。
using编译指令即起到这个作用
using namespace std; //即可以使用std名称空间中定义的名称而不必使用std::前缀
在大型项目中,可能会导致代码阅读不清晰等问题,所以可以采用using std::cout的办法使用using声明
注:更详细的关于命名空间的可以继续查询
cout<< 其中插入运算符<<其实是一个运算符重载的例子
**c++可以根据用户需求为其自定义的类重新定义运算符的含义
endl与\n换行的区别:endl确保程序继续运行前刷新输出(即运行到此处立即显示在屏幕上),\n则有可能在输入信息后才出现提示(\n转义序列)
C++中,回车与空格和制表符的作用相同,即他们可以互相替换,就是语句书写,一行代码可以空格或回车分成几行但是不会报错。但是不能放在变量或关键字中,即ma in违法。
c++使用变量前必须声明
C++中,主函数中的return 0;是操作系统如Windows是调用程序,0是返回给操作系统,通常退出值为0则程序运行成功,非零则存在问题。
第三章
命名规则:以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符
注:这些名称通常用于标识内部实现细节、预定义符号或其他特定用途。程序员应避免在自己的代码中使用这些命名以防止发生冲突。
以一个下划线开头的名称被保留给实现,用作全局标识符。这意味着这些名称用于表示特定的标识符或对象,例如全局变量或函数,但程序员应谨慎使用它们,以避免与实现的标识符或对象发生冲突。
以下是一些示例:
- “__cplusplus”:这是一个预定义宏名称,用于表示当前编译器是否支持C++编程语言。
- “_ZN9Namespace5ClassE”:这是一个C++编译器生成的名称修饰(name mangling)形式,用于表示命名空间 “Namespace” 中的 “Class” 类。
需要注意的是,这些保留名称的具体含义和使用方式可能会根据编程语言、编译器和实现的不同而有所变化。因此,在编写代码时,建议遵循编程语言的命名约定,并避免使用以双下划线或下划线和大写字母开头的名称,以及以单个下划线开头的全局标识符。
总结:避免即可
宽度递增:char、short、int、long、long long
C++确保了最小长度
计算机内存的基本单元 位(bit)
字节(byte)指8位的内存单元,指计算机内存量的度量单位
sizeof运算符可对类型名或变量名进行求值,对类型名时必须加括号,对变量则可进行选择。
自然长度(natural size)指计算机处理起来效率最高的长度
第一位1-9 十进制
第一位0 八进制
第一位0x或0X 十六进制 af和AF表示了十六进制的10-15
不管值以什么什么形式储存,在内存中都是以2进制形式储存
cout默认使用十进制输出,可自定义
cout<<hex 在这个之下以十六进制输出
cout<<oct 在这个之下以八进制输出
可以使用cout.setf()来设置小数点后的输出位数
2022LU 将2022存储为无符号类型的long型,即在数字后面增加后缀以此来表示存储为什么类型的
在字符存储时,输入和输出M而不是对于的ASCALL码,实际上是cin和cout替我完成了转换工作,存储时存储的还是对于的ASCALL码,储存时其实可以看做一个整型,可以通过+1来达到表示下一个字母的功能
关于char的有符号与无符号类型与存储范围的解释:
char
类型的范围是 -128 到 127 是因为 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)编码约定了字符与整数之间的映射关系。
在 ASCII 编码中,每个字符都有一个对应的整数值。其中,0 到 127 的范围内的字符被映射到整数 0 到 127,其中包括各种标点符号、数字、字母和特殊控制字符。
因此,C++ 中的 char
类型通常用于存储 ASCII 码中的字符,其值的取值范围对应于 -128 到 127,其中负数范围是为了表示扩展的 ASCII 码(即带有最高位设置为1的字符)。
需要注意的是,ASCII 码最初只定义了 0 到 127 的范围,后来扩展了常见的字符集合,如扩展 ASCII(ISO-8859)和 Unicode。对于扩展的字符集合,可能需要使用更大的整数类型来表示字符。
wchar_t(宽字符类型)可以表示拓展字符集
2.52e+8 表示为2.52 * 10^8
7.62e-6 表示为7.62 * 10^-6
负号在值前表示正负,在e后只表示缩放
在C++中,float只保证六位有效,所以小数位数若较多则使用double
C++中,函数重载(Function Overloading)指的是在同一个作用域内定义具有相同名称但参数类型或参数个数不同的多个函数。这样,当程序调用重载函数时,编译器会根据传递的参数选择合适的函数进行调用。(根据传入值不同自动选择对于的算法)
auto 若使用该关键字,且不指定变量的类型,则编译器会将变量的类型设置为初始值的类型,即等号右边是什么类型就是什么类型的变量
在处理较复杂情况时,才会用到这个情况。
字符通过其数值编码来表示,I/O系统决定了编码是被解释为字符还是数字
第四章
转义符号\ "
strcpy(a,b);//把b复制给a
strcat(a,b);//把b添加到a后
方法是一种函数
可以用冒号:来规定某个变量的指定大小
union(共用体)是一种数据格式,能存储多种数据类型,但只能表示一次,即当前用int即表示为int,哪怕内部包含double也是int类型;共用体每次只能储存一个值,因此必须有足够的空间,共用体长度位最大的成员的长度。
用途:数据项使用两种或更多的格式(但不会同时使用)可以用共用体来节省空间
enmu定义:枚举、常被用来定义符号常量如
enum interpolation //插值1的办法,线性、权重、在进行均匀化处理时,使用四个相邻数据点的值进行插值计算、二维插值方法
{
linear_interpolation,
weighted_interpolation,
quarter_weighted_interpolation,
bilinear_interpolation
};//插值,枚举型常量,可以使用里面的值来执行对应的插值
void set_interpolation_method(int a);//通过这个set选择执行哪个插值
int * p = value ;
是将p的值变成了value的地址 而*p则是取地址中的值