3 表达式
表达式1 基础组合运算 优先级 结合律 类型转换运算符重载左值和右值2 算数运算符 3 逻辑和关系运算法 短路求值 逻辑与,当第一个判定为否的时候,不再执行第二个判定,可以用来屏蔽第二步的计算,代替条件判断!!!!!!! 逻辑或,当第一个判定为是的时候,不再执行第二个判定,可以用来屏蔽第二步的计算,代替条件判断!!!!!!! 当且晋档左侧的运算对象无法确定表达式的结果是,才会计算右侧运算对象的值! 4 赋值运算法 5 递增递减运算符 尽量使用前置版本的自增自减运算符。 后置递增运算符的优先级高于解引用的运算符。 1*pb++ //等价于*(pb++) 6 成员访问运算符 点运算符。对象成员访问运算符。 箭头运算符。指针成员访问运算符。 解引用运算符的优先级抵御点运算符。所以解引用运算符的优先级很低。 1*p.size();//相互等价*(p.size()) 7 条件运算符 ?: 8 位运算符 位运算符作用域证书类型的运算对象,并把运算对象看成二进制位的集合。 9 sizeof 运算符10 逗号运算符11 类型转换隐式类型转换——算数转换 整形提升 其他隐式类型...
6 函数
函数1 函数基础构成 返回类型、形参列表、函数体 使用调用运算符来执行函数,传入实参列表。 编写函数 调用函数 主调函数和被调函数。程序的控制权由主调函数交给被调函数。 return 语句返回。程序的控制权由被调函数返回给主调函数 形参和实参 没有规定实参的求值顺序,默认是从右向左。 局部对象 形参和函数体内部定义的变量同城局部变量 局部变量会屏蔽外部同名的变量。 自动对象。运行时自动创建,栈函数运行完时自动释放。只存在于块执行期间的对象是一种自动对象。 局部静态带向。初始化全局静态数据段。直到程序终止才会被销毁。 函数声明 在头文件中进行函数的声明。 分离式编译 把程序分离到多个文件中去。每个文件独立编译。 最后链接各个独立编译的文件 2 参数传递值传递 初始值被赋值给形参。但是形参的修改无法改变原来变量的值。 指针也是值传递,拷贝的是指针的值。通过指针能够修改原来的对象。即修改指针指向的值,但是原来指针的值依旧不能修改。 引用传递 传递原来变量的引用,修改会直接引起原来变量的变化。 感觉使用引用传递要通过指针地址的值传递快多了。 引用传递还能帮我们...
7 自定义类型-类和结构体
类 类的基本特性 数据抽象和封装 继承 多态 1 类的构成——抽象概念 数据抽象是一种依赖于接口和实现的分离的编程技术。 类的接口包括用户所能执行的操作;类的实现包括类的数据成员、负责接口实现的函数体以及定义类所需要的的各种私有函数。 封装实现了类的接口和实现的分离。 类成员 定义包含数据成员和成员函数 定义在类内部的函数是隐式的 inline 函数! this指针 this 指针。用来指明当前绑定的对象。只在依赖对象的函数中添加 this 指针。 常量成员 常量成员函数。const 关键字放在成员函数的参数列表之后。常量函数的 this 指针指向常量对象。不能对常量对象内数据进行修改。 123456789class A{ const int getM(){//表示返回值是const类型的 } int getN() const{//表示函数是const类型的 }} 当一个函数被 const 说明后,其函数中出现的对外部数据的任何写入或修改都将被系统检查为出错。如果把函数 writ...
10.强制类型转换
强制类型转换 参考文献 1 强制类型转换C 强制类型转换123(type-id)expression//转换格式1type-id(expression)//转换格式2 强制类型转换。可能会丢失精度。 隐式类型转换。默认情况下会向上转换,即向位数更多的位置转换。 避免无符号和有符号的混用。带符号的数会自动转换成无符号的数。 C++强制类型转换1234static_cast<new_type> (expression)dynamic_cast<new_type> (expression)const_cast<new_type> (expression)reinterpret_cast<new_type> (expression) static_cast dynamic_cast const_cast reinterpret_cast 2 详解static_caststatic_cast 相当于传统的 C 语言里的强制转换,该运算符把 expression 转换为 new_type 类型,用来强...
11.初始化的方法
初始化方法 参考文献 谈谈C++中各种初始化方式 C++的各种初始化方式 初始化的区别 1 初始化方法C++中的初始化主要包括五种: 默认初始化 值初始化 直接初始化 拷贝初始化 列表初始化 123456789101112131415161718class Car{public: int a=0; int b=1; Car(int aa,int bb):a(aa),b(bb){};//初始化列表,进行初始化 Car(int aa):Car(aa,0){};//委托构造函数,使用第一个构造函数进行构造。 Car():Car(0,0){};//默认构造函数,委托构造函数 string m="fjeioaf"; string *n=&m;};//一下是初始化方法 Car t1(3,4);//调用构造函数 Car t2 = Car(3,4);//调用构造函数 // Car* t = new Car(3,4); ...
4.空间分配的说明
字面常量与const限定的常量,在编译器编译阶段,会把用到该变量的地方都替换成对应的值。 变量,在编译阶段分配空间,在执行阶段修改变量的值。根据变量的名称或地址索引分配到的空间。 动态变量,在执行阶段动态分配内存空间,在执行阶段修改动态变量的值。
6.高低地址与高低位
1 高低地址基础可以把主存看成一本空白的作业本,你现在要在笔记本上记录一些内容,他的页码排序是 1234第一页 : 0x0000001第二页 : 0x0000002...最后一页: 0x0000092 如果你选择从前向后记录(用完第一页,用第二页,类推)这就是先使用低地址,后使用高地址.业内表述:动态分配内存时堆空间向高地址增长,说的就是这种情况.这个向高地址增长就是先使用低地址,后使用高地址的意思. 10x0000001 -> 0x0000002-> ... -> 0x0000092 如果你选择从后往前记录(先用笔记本的最后一页,用完后使用倒数第二页,类推) 这就是先使用高地址,后使用低地址.业内表述:0xbfac 5000-0xbfad a000是栈空间,其中高地址的部分保存着进程的环境变量和命令行参数,低地址的部分保存函数栈帧,栈空间是向低地址增长的.这个向低地址增长就是先使用高地址,后使用低地址的意思. 10x0000092 -> ... ->0x0000002 -> 0x0000001 2 高低位基础 这个高地址与低地...
5.C++内存分配
内存分配内存分配示意图 Unused Memory:用于程序代码块对齐Read-only code segment:只读,存代码和一些其他的东西 Read/Write data segment: .data:存初始化的全局变量和static变量,另外还有文字常量区,常量字符串就是放在这里,程序结束后有系统释放 .bss:存未初始化的全局变量和static变量 Heap:通过new和malloc由低到高分配,由delete或free手动释放或者程序结束自动释放 Shared libraries:调用的库文件,位于堆和栈之间 Stack:由高向低增长,和堆的增长方式相对,对不同的OS来说,栈的初始大小有规定,可以修改,目前默认一般为2M,由编译器自动分配释放 Kernel virtual memory:用户不可见不能访问 内存分配说明C/C++编译的程序所占用内存区域一般分为以下5个部分: 栈区(stack):由编译器自动分配和释放,用来存放函数的参数、局部变量等。其操作方式类似于数据结构中的栈。 堆区(heap):一般由程序员分配和释放(通过mallo...
9.风格转换
1 字符串转换C 字符串转 string12str ="helloworld";string s(str); string 转 C 风格字符串12string s("helloworld");const char * str = s.c_str(); 2 数组转换 数组也是 C++中很重要的复杂类型之一。vector 是对象类型。可以不用相互转换。C++支持数组的迭代器运算。建议尽量使用标准库类型,而非数组。 数组转 vector123int arr[] = { 1,2,3,5,5,8,2,6};vector<int> vec(arr, arr+sizeof(arr)/sizeof(int));vector<int> vec2(begin(arr),end(arr));//使用数组初始化vector vector 转数组由于 vector 内部的数据是存放在连续的存储空间,vector 转数组事实上只需要获取 vector 中第一个数据的地址和数据的长度即可。如果仅仅是传参,无需任何操作,...













