C++知识点总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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、如果没有为一个类提供自定义的拷贝构造函数,系统就会提供一个缺省的拷贝构造函

相关文档
最新文档