C++学习Day13——localstatic、枚举

Day13

local static

你可以在本地作用域中使用static来声明变量,这个和之前的都不一样,主要不同的在于变量的生命周期和作用域。生命周期的意思就是变量能存活多久,也就是在被删除前在内存中停留多久。 作用域就是我们能在哪里访问这个变量,比如我们在函数内声明一个变量,我们不能在别的函数里访问它,因为我们声明的这个变量相对于声明它的函数是“本地的”

示例
#include <iostream>


void Function() 
{
	int i = 0;
	i++;
	std::cout << i << std::endl;

}

int main(){
	Function();
	Function();
	Function();
	Function();
	Function();
	std::cin.get();
}

这个你没调用一次函数都会重新分配一个内存空间,所以值如下:
局部

如果你写成如下形式:

int i = 0;
void Function() 
{
	i++;
	std::cout << i << std::endl;

}

int main(){
	Function();
	i = 10;
	Function();
	Function();
	Function();
	Function();
	std::cin.get();
}

那么变量i就是一个全局变量,你可以在任何地方访问和改变它。当时当你想要这种效果又不想任何地方都能访问到这个变量,你可以改成如下形式:

void Function() 
{
	static int i = 0;
	i++;
	std::cout << i << std::endl;

}

int main(){
	Function();
	Function();
	Function();
	Function();
	Function();
	std::cin.get();
}

总结而言:local static的意思就是 相对于别的类来说,这个变量在声明它的类中就是本地的。其实还有很多具体请看https://www.bilibili.com/video/BV1VJ411M7WR?p=23

枚举

枚举由用户定义的若干枚举常量的集合。他的定义格式为:enum <类型名> {<枚举常量表>};

enum Example
{
	A,B,C
};


int main(){
	
	std::cin.get();
}

默认状态下,这个整数就是所列举元素的序号,序号从0开始。可以在定义枚举类型时为部分或全部枚举常量指定整数值,在指定值之前的枚举常量仍按默认方式取值,而指定值之后的枚举常量按依次加1的原则取值。

enum Example
{
	A=5,B=1,C
};


int main(){
	
	std::cin.get();
}

枚举值

示例

class Log
{
public:
	enum Level
	{
		error = 0, warning, info
	};
private:
	Level m_LogLevel = info;
public:
	void SetLevel(Level level)
	{
		m_LogLevel = level;
	}

	void Error(const char* message)
	{
		if (m_LogLevel>=error)
		{
			std::cout << "[ERROR]:" << message << std::endl;
		}
	}

	void Warning(const char* message)
	{
		if (m_LogLevel >= warning)
		{
			std::cout << "[WARNING]:" << message << std::endl;
		}
	}

	void Info(const char* message)
	{
		if (m_LogLevel >= info)
		{
			std::cout << "[INFO]:" << message << std::endl;
		}
	}

};


int main(){
	Log log;
	log.SetLevel(Log::error);
	log.Warning("Hello");
	log.Error("Hello");
	log.Info("Hello");	
	std::cin.get();
}

你可以能注意到了::。这个是什么东西呢?这个叫域操作符。例如System::Math::Sqrt()相当于System.Math.Sqrt()。也就是说A::member就表示类A中的成员member. B::member就表示类B中的成员member.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值