一.C++ 零散知识点
来源:互联网 发布:淘宝首页轮播代码 编辑:程序博客网 时间:2024/06/04 19:39
c和c++的区别
c和c++的区别
- 思想不一样。C是面向过程的而C++是面向对象的
- C是C++的子集,而C++是C的超集。最开始的时候C++就叫做C with classes,C++在C的基础上引入了封装、继承、多态、模板、异常处理,STL等新的元素
面向对象的基本特征
1、封装:就是把客观事物封装成类,类封装了数据和操作数据的方法,并且类内的数据和操作数据的方法只开放给可信的类和对象操作,实现信息的隐藏;
2、继承:在已有的类的基础上,通过添加和修改少量的代码得到新的类,子类能继承父类的数据和操作数据的方法,同时能够添加子类独有的数据和操作数据的方法,实现了代码重用,提高开发效率;
3、多态:多态有静态多态和动态多态,静态多态是通过函数重载实现的,函数重载具有相同的函数名,系统会根据参数调用对应的函数;动态多态是通过虚函数实现的,指针调用虚函数的时候,系统会根据指针所指向的对象决定调用哪个函数。
new和delete
malloc和free
1)使用malloc必须使用sizeof计算所需要的字节数,而new能自动根据数据类型计算所需分配的内存的大小,减少了发生错误的可能性
2)new能自动的返回正确的指针类型,而malloc必须进行强制类型转换
3)malloc/free是C标准库函数,new/delete是C++的运算符
string和char*区别?
string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题。
char *的内存管理由用户自己处理,很容易出现内存不足的问题。
当我们要存一个串,但是不知道其他需要多少内存时, 用string来处理就最好不过了。
当你知道了存储的内存的时候,可以用char *,但是不如用string的好,用指针总会有隐患。
用string还可以使用各种成员函数来处理串的每一个字符,方便处理。
用char *处理串,就不如string的方便了,没有相应的函数来直接调用,而是要自己编
写函数来完成串的处理,而且处理过程中用指针还很容易出现内存问题。
我建议尽量使用string,不用char*;
尽量使用vector(关联数组),不用数组;
尽量使用迭代器,而不用指针。
strlen和sizeof
char str[20]="0123456789";
int a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0'为字符串结束标记。
int b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响
strlen是函数,要在运行时才计算,只能用char* 做参数,功能是:返回字符串长度
sizeof是运算符,在编译时就算好了,可以用类型作参数,功能是:获得保证能容纳实现所建立的最大对象的字节大小
指针和引用
(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:
int a=1;int *p=&a;
int a=1;int &b=a;
上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。
而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。
(2)可以有const指针,但是没有const引用;
(3)指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)
(4)指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;
(5)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。
(6)"sizeof引用"得到的是所指向的变量(对象)的大小,而"sizeof指针"得到的是指针本身的大小;
(7)指针和引用的自增(++)运算意义不一样;
Ps:
在讲引用作为函数参数进行传递时,实质上传递的是实参本身,即传递进来的不是实参的一个拷贝,因此对形参的修改其实是对实参的修改,所以在用引用进行参数传递时,不仅节约时间,而且可以节约空间。
指针数组
数组指针
指针函数
函数指针
右左规则:
int *p[4]; //指针数组。 是个有4个元素的数组, 每个元素的是指向整型的指针。(数组的每个元素都是指针)
int (*p)[4]; //数组指针。 它是一个指针,指向有4个整型元素的数组。 (一个指针指向有4个整型元素的数组)
int *func(void); //指针函数。 无参函数, 返回整型指针。 (函数的返回值为int*)
int (*func)(void); //表示函数指针,可以指向无参, 且返回值为整型指针的函数。 (函数的返回值为int)
堆和栈区别
- 栈是由系统自动分配的,速度块,程序员无法控制;堆需要程序员自己申请和释放,容易产生内存碎片,自由度高;
- 栈是向低地址扩展的数据结构,是一块连续的内存区域;堆是向高地址扩展的数据结构,系统用链表存储空闲内存地址,因此是不连续的;
- 栈未初始化的时候是0xcccc;堆未初始化的时候是0xcdcd;分别对应中文GB2312编码中分别对应“烫”字和“屯”字
- 一.C++ 零散知识点
- [C++] 零散知识点
- C语言基础-零散知识点总结(一)
- C语言__零散知识点
- Object c学习知识点零散记录
- 菜鸟初学c++,一些零散小知识点
- C/C++零散知识点总结(四)
- 零散知识点
- 零散知识点
- 零散知识点
- 零散知识点.....
- 零散知识点
- 零散知识点
- 零散知识点
- 零散知识点
- 零散知识点
- 零散知识点
- 零散知识点
- gdb gdb交叉编译
- Your account has been blocked
- bzoj1176 [Balkan2007]Mokia
- Android——Intent
- Cookie中存放json字符串异常的解析
- 一.C++ 零散知识点
- 利用Maven搭建Spring+SpringMVC+Mybatis框架项目(一)
- 【51Nod1310】Chandrima and XOR
- Python3 和 Python2的区别
- UI控件之UITableView初步使用
- CentOS+Mysql误操作恢复
- 第一章 基于jQuery插件的使用
- 数据结构与算法——1.4算法分析
- 搜索系统2:倒排索引