一. C与C++的基本区别:C语言简单,但是使用比较复杂,C++语法较难,注重思想,使用简单(面向对象)
a. 头文件:
C++标准库的头文件不带.h,最常用的是iostream
C语言的头文件依然可以继续使用,stdio.h或cstdio
b. 输入输出
cout<< 输出
cin >> 输入
endl;换行;
cout 和不再使用占位符,他可以自动识别占位符
scanf和printf可以继续使用
c.
引入了名字空间概念
using namespace std;
二.C++中的数据类型
1. C++完全兼容C语言中的所有数据类型(C++兼容C语言的所有语法)
2. 添加了bool类型,字节数是1,数值true(非0),false(0);
3. 在显示bool变量前,使用boolalpha可以以true或false的形式现实bool的值
4. void* 与其他类型指针的转换受到限制
void* 不可以直接给其他类型的指针赋值,必须经过强制转换
任意类型的指针都可以直接给void*赋值
三.C++中的联合,枚举,结构
1. 在C++中的这些一旦设计成功,在之后的使用不需要加关键字
2. 枚举的检查更为严格(C++中的枚举是一种独立的数据类型)
3. 结构成员中可以有函数,在函数中可以直接访问他的成员,
4. 结构对象可以继续使用.或->访问成员,成员函数。
5. 结构中的成员添加了访问属性:
public :开放的,被他修饰过的成员在人和位置都可以访问
private:私有的,被他修饰过的成员只能在成员函数中使用
protected:
6. 结构体在创建的时候会自动调用一个函数-构造函数;
a. 没有返回值
b.名字与结构相同
c. 参数可以任意
7. 结构体在创建的时候会自动释放一个函数-析钩函数;
a. 无返回值,参数
b.~结构名
四. 引用
1. 引用就是起别名,起"外号",为一个标识符另外再起一个名字
2. 引用必须初始化,
3. 引用不光可以引用标识符,也可以引用立即数(右值,字面值,常量),但必须加const属性
4. 不能定义空引用,"野引用"或"悬空引用"是存在的(引用推内存的数据,当堆内存释放后就不应该再使用)。
5. 引用只能是一次性的,无法再更改(引用一旦成功之后,他就是一个变量了,这个身份至死不渝)
6. 引用也可以当作函数的参数,他引用的对象就是函数的实参,引用可以达到指针的效果
a.函数之间共享变量
b.提高参数的传递效率(比指针还要高)
c.当参数来使用
注意:能使用引用就不要再使用指针了
引用不可以取代指针;
7. 应用也可以当作函数的返回值,但绝不能返回局部变量的引用
五.C++中的内存管理运算符
1. 在C++中使用new/delete来管理内存
2. new在内存时允许对内存进行初始化
3. 使用new创建结构对象时会自动调用构造函数,delete时会自动调用析构函数
总结:
1. malloc/free是标准库里的函数,使用时需要添加头文件,new/delete是C++语言中的运算符
2. malloc返回值之是void*指针,new返回的是有类型的指针
3. malloc创建时不会调用结构函数,free不会调用析钩函数,但new/delete会自动调用
4. 使用malloc使用内存时需要计算自己的字节数,而使用new的时候会自动计算
4. []可以配合new和delete申请和释放数组
new[]不可以与delete混用,必须使用delete[]释放
使用new[]/delete[]创造多少个对象就会调用多少次析钩和构造
5. new/delete与malloc/free不能混用
6. delete不可以重复释放,但可以释放空指针
7. 如果使用new申请内存失败会产生异常 "std::bad_alloc"
六.C++中的函数
1. C++中的函数可以在main函数前执行,C语言中不可以
2. C++中函数名字可以相同,只要参数不一样即可(函数重载,不只是参数)
函数可以同名,并不是真正意义上的同名,只是在编译期间把函数的名字添加了额外的信息(函数的参数), 返回值不算在内
3. 内联函数
内联函数把函数编译成二进制,然后在需要的位置直接把函数拷贝过去,而不是跳转过来
这样可以减少进栈出栈和调用,以此提高程序的执行效率,但是这样会增加可执行文件的大小
内联函数与宏函数的区别:从本质上来说是一样的,但内联函数可以检查参数,,也可以具有返回值。
inline 返回值 函数名(参数)
{
}
4. c++中函数的参数可以有默认值,
1. 函数的默认参数要靠右
2. 默认参数要尽量少用,因为可能会引用重载错误
3. 函数的默认参数是编译器在编译时帮助赋值的,所以只能由全局变量,静态变量,字面值对参数进行赋值。