c和c++的区别 | c和c++的区别
|
面向对象的基本特征 | 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) |
堆和栈区别 |
|
一.C++ 零散知识点
最新推荐文章于 2022-06-18 18:02:38 发布