C++知识点总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++知识点总结
Day01
一、名字空间(标准库中的标识符都定义在std名字空间中)
1、名字空间的定义
namespace名字空间名{名字空间成员}
2、名字空间指令
using namespace名字空间名;
3、名字空间声明
using名字空间名::标示符;
4、无名名字空间
namespace{名字空间成员;}
5、无名名字空间的声明
::标示符
二、C++的结构、联合和枚举
1、C++的结构里面可以定义函数
2、C++里定义结构型变量的时候可以省略struct关键字
3、C++中的声明联合类型的变量可以不加union关键字,支持匿名联合
4、C++的枚举是一个独立的数据类型,而不是整数类型。
三、C++的bool类型
bool类型变量只可以取true或false
四、C++的函数
1、函数支持重载
重载:在同一个作用域中,函数名相同,参数表不同的函数之间构成重载关系。
函数原型:返回类型+函数名+参数表
函数签名:函数名+参数表//c++中,同一作用域中,函数签名必须是唯一的。
2、函数指针
函数指针的类型决定其具体指向的重载版本,而不是由实参的类型决定。
3、extern“C”
通过extern"C"指示编译器以C语言的方式处理C++源文件中的C函数(不做函数名置换)。
5、缺省参数
如果为函数的一个参数指定了缺省值,那么该参数右面的所有参数必须都有缺省值。
注意:缺省参数只能用在函数的声明中。
6、哑元
借助哑元参数保证函数的向后兼容。
借助哑元实现函数的重载。
7、内联
内联函数保持了函数的特性,同时避免了函数调用的开销。
inline关键字仅仅表示希望该函数被编译为内联,通常情况下,大函数和递归函数不会被处理为内联。
五、内存分配
1、new/delete操作符
如果内存是以数组的形式分配的,那么也应该按照数组的方式释放——delete[]。
如果new失败,这时会抛出bad_alloc异常,程序应该捕获并处理该异常,否则进程将被系
统杀死。
Day02
一、引用&
1、引用实际上是一个变量的别名。
2、引用必须在声明的同时初始化
3、引用一旦初始化,再不能引用其他变量
4、只有const型引用才能引用常量
5、不能对常引用做赋值操作
二、C++中的类型转换
1、静态类型转换:static_cast<类型>(变量);
需要编译器对类型转换安全性进行检查;
将void*转换为具体类型的指针。
在源类型和目标类型之间只要有一个方向上可以做隐式类型转换,那么在两个方向上就都可以做静态类型转换。
2、动态类型转换:dynamic_cast<类型>(变量);
用于在具有多态特性的父子类之间的转换。
3、常量类型转换:const_cast<类型>(变量);
去除指针或者引用上的const属性。
4、重解释类型转换:reinterpret_cast<类型>(变量);
允许对任意类型的指针进行转换。
在指针和整型之间进行转换。
三、类和对象
1、类的声明和定义可以分开、类的成员变量、类的成员函数。
2、类的访问控制
1)public:公有成员,谁都可以访问。
2)private:私有成员,只有自己才能访问。
3)protected:保护成员,只有自己和自己的子类可以访问
访控限定符|访控属性|自己|子类|其它
----------------------------------------------------------------------------
public|公有|Ok|Ok|Ok
protected|保护|Ok|Ok|No
private|私有|Ok|No|No
注意:类的缺省访控属性是私有,而结构体的缺省访控属性是公有。
3、构造函数
1)如果一个类中没有定义任何构造函数,系统就会自动提供一个默认的无参构造函数。
2)如果为一个类定义了构造函数,系统就不会在为该类提供任何构造函数了。
3)构造函数可以重载
4)构造函数初始化列表:
1>需要对类类型的成员变量做初始化;
2>含有引用或常量型成员;
4、对象的创建与销毁
1)在栈中创建对象
类名对象名(构造参数);//隐式构造
类名对象名=类名(构造参数);//显式构造
2)在栈中创建对象数组
类名数组名[元素个数]={类名(构造参数),...};
3)在堆中创建对象
类名*对象指针=new类名(构造参数);
4)在堆中创建对象数组
类名*对象数组指针=new类名[元素个数];
Day03
类和对象(下)
一、this指针
1、一般而言,关键字this是一个指针。对于一般成员函数,它指向调用该成员函数的对象,
而对于构造函数,它则指向这个正在被构造的对象。
2、在构造函数中可以通过this指针区分成员变量和局部变量(包括参数)。
3、基于this指针的自身引用还被用于支持多重串联调用的场合。
4、将this指针作为函数的参数,实现对象间的交互。
二、常量型成员函数和常量型对象
1、常量型成员函数中的this指针为常量型,以此防止对成员变量的意外修改。对常量型对
象(包括指针和引用),只能调用其常量型成员函数。
2、被声明为mutable的成员变量可以在常量型成员函数中被修改。
3、常量型成员函数和具有相同签名的非常量型成员函数构成重载关系。
4、当常量型成员函数与非常量型成员函数构成重载关系时,非常量对象会优先选择非常量
型成员函数。
三、析构函数
1、没有参数,不能重载。
构造顺序:创建成员变量->构造函数体
析构顺序:析构函数体->销毁成员变量
2、缺省析构函数
1>对于未定义析构函数的类,系统会提供缺省析构函数,该析构函数负责销毁该类的成
员变量。
2>缺省析构函数不负责释放动态分配的资源。
3、对于动态分配的资源,必须通过自己定义的析构函数进行释放。
4、析构函数是释放的资源不仅限于内存资源。
四、拷贝构造函数
1、拷贝构造:用一个已有的对象去构造另一个同类型的副本对象。
2、拷贝构造是通过拷贝构造函数实现的。
class类名{
类名(const类名&源对象引用){
从源对象到当前对象的复制;
}
};
3、如果没有为一个类提供自定义的拷贝构造函数,系统就会提供一个缺省的拷贝构造函