2020-C++高级程序设计-C++ 核心关键字
c++核心特殊关键字
1. friend关键字
- private和protected不能从声明它们的同一类外部访问。
- 被friend关键字修饰的函数或类成为友元函数或友元类。
1.1. 友元函数
- 友元函数是可以直接访问类的私有成员的非成员函数。(不需要通过public部分的接口)
- 它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需要在友元的名称前加上关键词friend。
- 声明格式:
friend 类型 函数名(形式参数);
- 友元函数的声明可以放在类的私有部分,也可以放在公有部分,这并没有区别。
- 一个函数可以是多个类的友元函数,只要在多个类中声明即可。
1.2. 友元类
- 友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包含私有成员和保护成员)。
- 语法:
friend class 类名;
- 注意:
- 友元关系不能被继承。
- 友元关系是单向的,不具有交换性。
- 友元关系具有非传递性。
2. this关键字
- 在C++中,每一个对象都可以通过this指针来访问自己的地址。
- this是所有成员函数的隐藏参数。
2.1. 用法
- 如果有某个变量和成员变量相同,那么用this来引用成员变量
- 需要返回变量或结构体变量时,使用this关键字。
2.2. 注意
- 友元函数没有this指针
- this关键字之能用于成员函数,不能被修饰static的函数。
- 因为在C++中,this关键字是一个指向对象自己的指针,不能加点,而是用->
3. volatile
3.1. 易变性
- 也就是在汇编层面上来讲,下一条语句不会直接使用上一条语句的volatile变量的寄存器内容,而是重新从内存读取。
3.2. 不可优化
- volatile告诉编译器,不要对这个变量进行优化,保证程序员写在代码中的指令一定会被执行。
3.3. 顺序性
- 保证在多线程情况下的一定的处理顺序
3.4. 参考
4. static 关键词
- 用static可以为类类型的所有对象所共有,像是全局对象,但又被约束在类类型的名字空间中。static定义的静态变量在函数执行后不会释放其存储空间。
- 修饰一个全局变量只对定义在同一文件中的函数可见:其他文件可以定义相同名字的变量。
- 修饰局部变量,这个变量值不会因为函数终止而丢失,该变量在全局函数区分配内存(局部变量在栈区)
- 可以实施封装,将其放在private和protected区域
- static成员没有this指针,它不是任何一个对象的组成部分,推荐使用"类名::static成员名"调用
4.1. 成员函数
- 声明时候写static关键词
- 定义时候不写static关键词
- 不可以使用const以修饰其不改变其成员属性。
static void f() const{};//error
,因为static函数不包含this指针 - 不能使用virtual修饰其虚拟性
- 目的:作为类作用域的全局函数。不能访问类的非静态数据成员。类的静态成员函数没有this指针,这导致
- 不能直接存储类的非静态成员变量,调用非静态成员函数
- 不能被声明为virtual
4.2. 数据成员
- 声明时候写static关键词
- 定义时候不写static关键词,如果定义的时候加了,其实是变成了文件作用域
static const
数据成员- 可以在类中声明并且初始化,然后在类定义之外再次进行定义
- 或者在类中声明,但在类定义外进行定义。
- 非const的static数据成员仅能在类中声明,并在类定义之外进行定义。
5. const类型
- const定义的常量在超出其作用域之后其空间会被释放
- const数据成员只在某个对象生存期内是常量
- 对于整个类是可变的,因为类是可以创建多个对象,对于不同对象其const数据成员的值可以不同
- const数据成员的初始化只能在类的构造函数的初始化列表中进行,想要建立在整个类中都恒定的常量,应该用类对的枚举常量来实现,或者static const
- const成员函数主要目的是防止成员函数修改对象的内容。即const成员函数不能修改成员变量的值,但是可以访问成员变量。当方法成员函数时,该函数只能是const成员函数。
- 数组成员不能在初始化列表中初始化
2020-C++高级程序设计-C++ 核心关键字
https://spricoder.github.io/2020/07/01/2020-C-plus-plus-advanced-programming/2020-C-plus-plus-advanced-programming-C++%20%E6%A0%B8%E5%BF%83%E5%85%B3%E9%94%AE%E5%AD%97/