C++学习笔记-枚举enum

枚举基本上就是一个数值集合,它们是给一个值命名的一种方法,它还可以帮助我们将一组数值集合作为类型,而不仅仅用整数作为类型。

C++学习笔记-局部static

局部静态变量和全局静态变量在生存周期上是一样的,都是全局只存在一份。它们只在作用域上有所不同。不过我们在了解局部静态变量前,先看一个之前困扰我的问题。

困扰我的问题

下面是一个简单的单例模式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Singleton
{
private:
	static Singleton* s_Instance; // 不能在这里直接初始化(如 static Singleton* s_Instance = nullptr;)。
	// 静态成员变量的定义(即分配内存空间)需要在类的外部进行,即使它在类内部被声明为private。

public:
	static Singleton& Get() { return *s_Instance; }

	void Hello()
	{
		std::cout << "Hello" << std::endl;
	}
};

// 在C++中,类的静态成员变量不能在类定义内部直接初始化(如 static Singleton* s_Instance = nullptr;)。
// 这是因为类的静态成员变量是属于类本身的,而不是属于类的任何特定对象,它们的存储和初始化需要在类的外部进行。
Singleton* Singleton::s_Instance = nullptr; 

int main()
{
	Singleton::Get().Hello(); // 调用没报错
}

我们在外部初始化s_Instance为nullptr,为什么Singleton::Get().Hello();调用没有报错?还能正常执行?不是应该空指针异常吗?

C++学习笔记-类中的static

类和结构体中的static变量和文件中的static是一个道理,只不过是在类中私有的,外部无法找到,因此需要在外部定义这个变量,就和你extern是一个道理,只不过这个类是在你当前文件中的,因此不需要extern关键字。

C++学习笔记-全局static

static 修饰的全局变量具有文件作用域,仅在定义它的源文件内可见,变量的生命周期为整个程序运行期,在 main 函数执行前初始化,程序结束时销毁。

C++学习笔记-类和结构体

在C++中,类(Class)是一种用户定义的数据类型,用于封装数据和对数据的操作。类是面向对象编程(OOP)的核心概念之一,允许你将数据和操作数据的方法组合在一起。

定义一个简单的类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class Player
{
public:
	int x, y;  // 成员变量
	int speed; // 成员变量

	// 成员方法
	void Move(int xa, int ya)
	{
		x += xa * speed;
		y += ya * speed;
	}
};