C++ 中的一些知识点总结
01 static
01.1 静态全局变量
static int s_Variable = 5;
- 【初始化】如果没有显式的初始化,则自动被程序初始化为
0
; - 【可见性】在声明它的整个文件中都是可见的,而在文件之外是不可见的;
- 【内存】在全局数据区分配内存;
- 【同名冲突】其他文件中可以定义同名
int
型变量s_Variable
,不会冲突(注:不能有两个同名的全局变量);
01.2 静态局部变量
- 【初始化】如果没有显式的初始化,则自动被程序初始化为
0
;静态局部变量在程序执行到该对象声明时,会被首次初始化,其后运行到该对象的声明时,不会再次初始化,只会被初始化一次; - 【可见性】不能被其作用域之外的其他模块调用;
- 【内存】在全局数据区分配内存;
- 【生命周期】不管是全局还是局部,其生命周期与程序相同;
01.3 静态函数
- 【作用域】作用域只在声明它的文件当中,不能被其他文件引用,其他文件可以定义同名的全局函数;
01.4 静态成员变量
class Entity
{
static int x;
const static int y;
};
int Entity::x; // 初始化静态成员变量
const int Entity::y = 5; // 定义的时候也要写 const
int main()
{
Entity::x = 5;
return 0;
}
- 【共享】静态成员变量独立存在,属于类而不属于对象,类的所有的实例共享同一个
static
类成员; - 【初始化】静态数据成员必须显式的初始化分配内存,类内声明类外定义;
- 【内存】在编译阶段就分配好空间,对象还没创建的时候就有了空间,存储在全局数据区;
- 【权限】他们仍然遵从
public/private/protected
规定的权限
01.5 静态成员函数
- 【调用】静态成员函数多了一种调用方式,在没有实例化的类对象的条件下可以调用类的静态成员函数;
- 【访问】静态成员函数中没有隐含的
this
指针,所以静态成员函数不可以操作类中的非静态成员,只能访问static
修饰的类成员; - 【声明】静态成员函数不能声明为
const
virtual
volatile
// 一个简单的用法
class Singleton
{
public:
static Singleton& Get()
{
static Singleton instance;
return instance;
}
void Hello() {}
};
int main()
{
Singleton::Get().Hello();
}
02 枚举类型 enum
02.1 作用域
// 默认从 0 开始
enum color { RED, GREEN, BLUE };
color col = RED;
color col = color::RED;
// 限定作用域
enum class color { RED, GREEN, BLUE };
// color col = RED; // 错误!
color col = color::RED;
// 也可以在类内
class Entity
{
public:
enum Level { Err, Warn, Info };
};
// 使用
Entity::Err;
02.2 初始化
// 从 5 开始
enum Example { Val_1 = 5, Val_2, Val_3 }
// 全部指定
enum Example { Val_1 = 3, Val_2 = 7, Val_3 = 9 }
// 指定部分,此时,Val_2 为 4
enum Example { Val_1 = 3, Val_2, Val_3 = 7 }
// 重复指定
enum Example { Val_1 = 3, Val_2 = 7, Val_3 = 3 }
02.3 指定枚举类型
// 注意,不能指定非整数类型
enum color:unsigned long
{
RED = 1,
GREEN = 5,
BLUE = 7
};
02.3 声明与赋值
类似结构体
enum color { RED, GREEN, BLUE };
color c = RED;
03 类
03.1 构造函数与析构函数
这里只介绍部分用法
// 不希望创建实例
class Entity
{
private:
// Entity(); // 也可以写在 private 里隐藏构造函数
public:
Entity() = delete; // 不允许构造函数
static int Get() { /* ... */ }
};
// 初始化
class Entity: public A // 继承
{
private:
A a;
public:
Entity(int a, int b, int c, int d)
: A(a, b) // 初始化基类的成员数据
, a(c, d) // 初始化成员的数据
{ }
};
析构函数没有参数,不能被重载
先到这里吧,以后再说。
参考链接:
- c++——static 总结 https://blog.csdn.net/www_dong/article/details/116102066
- c++ static 静态变量、静态函数 https://blog.csdn.net/baidu_16370559/article/details/91781127
- C++之静态成员变量 https://blog.csdn.net/z1zyy/article/details/128038036
- https://www.bilibili.com/video/BV1rb411d7mS
- static 成员函数不能被声明为 const virtual volatile 原因 https://blog.csdn.net/Sansipi/article/details/121378929
- C++枚举enum使用详解 https://blog.csdn.net/qq_35902025/article/details/127567837
评论区