目录
为什么有了malloc和free,还需要new和delete呢?
一、基本知识点
1.C++和c有什么不同
1.C++是在c的基础上扩充了很多内容,更加强大
2.C++完全兼容c,即在C中合法的程序,在C++中也是合法的
3.C语言面向过程(更注重过程,数据属性+对数据的操作)
C++面向对象(更注重结果, 对象+对象)
2.命名空间
在C中同一个作用域下不允许出现函数名相同或者变量名相同的情况
命名空间就可以解决这个问题
格式:namespace 命名空间名字
{
变量或者函数名;
}
访问:1.命名空间名::变量或函数名(); //main中使用
2.using namespace 命名空间名字; //main外面使用
3.标准输入输出流
加头文件:#include <string>
using namespace std;
输入:cin>>变量;
输出:cout<<"要输入的东西"<<endl; //endl是换行;
4.引用
目的:弱化指针,因为引用可以实现和指针一样的效果;使用方便!
与指针的不同:减少临时空间的分配;定义指针需要分配内存空间,而定义一个引用是不需要的
什么是引用:其实就是给已经有的变量起个别名!它和变量指的是同一块内存空间!
定义格式 : Int a=10; int &b = a;
引用和指针的区别
- 引用一定要进行初始化;指针可以不初始化;
- 引用只能初始化一次;指针是可以改变指向;使用引用比指针安全
- 指针需要开空间,引用不需要
5.函数重载
什么是函数重载:函数名相同,参数不同(顺序,类型,数量), 与返回值无关的一组函数互 为重载
函数重载的原理:编译后会对函数名进行重命名,不同的函数名对应的函数在内存中的地址是不一
样的,调用的时候自然执行不同的函数
6.参数默认值
参数默认值就是在定义函数时,给参数的默认值
注意事项:1.默认值给的顺序是从右向左;在调用函数的时候,给参数的顺序是从左向右!
特别是在函数重载的时候,一定要注意参数默认值可能会产生“二义性“!!!
2.参数默认值不能同时出现在函数声明或者函数定义中,只能出现在一处
7.动态分配内存
C语言:malloc与free
c++:new与delete
new和malloc的区别
1.new时运算符,malloc是函数
2.new可以重载,malloc不可以
3.malloc在堆区开辟空间, new在自由存储区开辟空间
4.malloc开辟空间失败返回NULL,new分配空间失败,抛出bac_alloc异常
为什么有了malloc和free,还需要new和delete呢?
因为malloc和free是C标准库中的函数,肯定不会去执行构造函数和析构函数的!而new和delete是会执行的!
二、进阶知识点
1.面向对象编程中类和对象
把一个的属性和行为整合在一起,来描述一类事物的,自定义的数据类型,在C++中称为类
关键词:class
类有三个访问成员的限定符:pub