四、基本数据类型和计算(三)

这篇具有很好参考价值的文章主要介绍了四、基本数据类型和计算(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

四、基本数据类型和计算(三)

1、枚举变量

1)通过案例体现枚举类型的作用

​ 假设要为我们的游戏装备设置稀有度属性,应该如何设计

装备级别 变量名
普通 normal
高级 high
稀有 rare
史诗 epic
传说 legend
神话 myth

不使用枚举变量,使用常量方式设置

#include  <iostream>
#define Normal 0  //普通装备
#define High 1   //高级装备
#define Rare 2   //稀有装备
#define Epic 3   //史诗装备
#define Legend 4   //传说装备
#define myth  5   //神话装备

int main()
{
	short weaponLv;
	
	short weaponALv = Rare;  //稀有
	short weaponBLv = myth;  //神话

	std::cout << "装备A的等级为:" << weaponALv << std::end;;
	std::cout << "装备B的等级为:" << weaponBLv << std::endl;

}

四、基本数据类型和计算(三)

2)枚举变量定义及声明

​ 计算机中没有这种类型,我们自定义一种数据类型,就叫做枚举类型

定义 enum class 类型名称:基本类型{选项1,选项2};
声明 类型名称 变量名称;
示例 如下

注:基本类型只能是整数类型,如果不写默认为int类型,整数类型用来说明大括号中定义的变量是什么类型。

//通过枚举类型设置装备的稀有程度
#include <iostream>
int main() {

	enum class EquipLv : int {     //可以将int替换为其他整数类型,如float
		normal = 10,   armyA = normal,//普通        //若不初始化,默认为0
		high,          armyB = high,//高级          //从上之下自动递增,此处high为11
		rare,          armyC = rare,//稀有
		epic,          armyD = epic,//史诗
		legend,        armyE = legend,//传奇
		myth = 100,    armyS = normal//神话
	};

	EquipLv weaponAlv{ EquipLv::normal }; //定义装备A等级
	EquipLv weaponBlv{ EquipLv::myth }; //定义装备B等级

	short diff = (int)weaponAlv - (int)weaponBlv;       //如果不强制类型转化,无法直接进行计算
	std::cout << "weaponAweaponB装备的等级差为:" << diff << std::endl;

	weaponAlv = EquipLv::rare; //重新赋值。修改装备A的等级
	std::cout << "装备A的等级修改为:" << int(weaponAlv)<<std::endl;
}

四、基本数据类型和计算(三)

2)枚举类型注意点

①枚举类型可以提高代码的可读性和安全性

②枚举类型默认是int类型

③枚举类型成员只能是整数类型

④枚举类型和其他类型转化需要强制转化

⑤默认情况下,枚举类型的下一项的初始值是上一项的初始值+1

2、自定义变量名称

将C/C++中已有的变量进行改名,可以将一些特别长的变量名进行改名

语法 含义 缺点
#define A TypeName 以后代码中的A可以被替换为TypeName 简单替换
typedef TypeName A; 以后TypeName类型的名字可以用A替换 不直观
using A=TypeName; 以后TypeName类型的名字可以用A替换 可以实现一些新特性

四、基本数据类型和计算(三)

#include <iostream>
#define 整数 int   //自定义变量名称方法一
#define elong long ////自定义变量名称方法一,将long替换为elong

int main() {
	整数 num{ 100 };    //编译器编译时,会将所有的"整数"替换为int
    
	typedef unsigned xxx;      //自定义方法名称二,即将unsigned类型替换为xxx
	xxx A{200};
    
    using ellong = long long;   //自定义变量名称方法三,将long long替换为ellong,
	ellong a{50};
    
    using elllong = elong elong; //此时的一个long已通过elong替换

	std::cout << num << char(10);
	std::cout << A << char(10);
    std::cout << a << char(10);

}

四、基本数据类型和计算(三)

3、命名空间

1)命名空间定义

​ 为了将需要用的东西放到一起,例如: 粮食仓库::大米;粮食仓库:小麦

namespace namespace_name {
   // 代码声明
}

2)命名空间使用

使用方式 语法 备注
方式一 std::cout 使用限定符::
方式二 using std::cout;cout<<"再不用std"; 使用using,只有cout不需要写命名空间std
方式三 using namespace std; 命名空间所有内容都可进行使用,不推荐
//命名空间的定义和使用
#include <iostream>

namespace lGame {
	int HP{ 1000 };
	int MP{ 1000 };
	int lv{ 1 };
	namespace Weapon {              //命名空间的内嵌定义
		int damage{ 3000 };
		namespace WeaponInfo {
			int lv = lGame::lv;
		}
	
	}
}

int main() {
	using std::cout;       //命名空间第一种使用方式
	using namespace std;   //命名空间第二种使用方式
	using lGame::HP;       //命名空间第三种使用方式
    
    std::cout<<"用户血量为"<<lGame::HP<<std::endl;   //命令空间的使用
    std::cout<<"用户血量为"<<HP<<std::endl;

	int c = lGame::Weapon::damage;        //命名空间内嵌使用
	cout << c;         //此时不需要在写cout

}

四、基本数据类型和计算(三)

3)命名空间注意事项

①不能将命名空间定义放在函数体内

②可以在一个命名空间内嵌入另一个命名空间

③子级命名空间调用父级命名空间依然需要限定符::

4、变量的生命周期

​ 变量的声明周期,本质上为内存的生命周期。即内存的申请和释放

#include <iostream>

int a{ 100 };      //没有在代码块内,属于全局变量,程序结束则变量结束
int main()
{
	int a{ 160 };
	{
		int a{ 350 };     //在代码快中可以用::a来调用全局变量a{100};
		{
			char a = 'A';
			std::cout << a<<std::endl;  //输出A
			std::cout << ::a << std::endl; //输出100
		} 
		std::cout << a << std::endl;  //输出350  //变量就近往上原则,声明周期原则,通常找距离它最近的值
	}
	std::cout << a  <<std::endl;  //输出160

}

四、基本数据类型和计算(三)

1)注意事项

①代码块中的变量的生命周期从声明开始,知道这个代码块结束

②声明在代码开始前的变量叫做全局变量,全局变量的生命从程序运行开始,知道程序退出

③在变量名冲突的情况下,采用就近原则

④要访问名称冲突的全局变量,可以使用限定符::来访问

⑤变量哪里用哪里声明

5、位运算之异或运算

1)异或运算关系:相同为0,不同为1

2)作用:加解密

3)异或运算最大特征:具有还原功能,只要其中有一个值发生了变化,都可通过相互异或检测出来。

即a^b=c; b^c=a; c^a=b;

4)案例:

​ 麟江湖是一个单机游戏,其中变量diamond代表钻石,变量vip_exp代表累计钻石消费数。设计一个算法,使得能够发现,用户使用单机修改器修改了钻石或者累计钻石数这样的做必须行为。

思路:将钻石diamond和累计消费数vip_exp放在a、b的位置,只要将两个值进行异或操作生成C,只要使用C和其中任何一个值异或计算,就可判断出第三个值是否发生改变,进而检测出用户有无作弊

#include <iostream>

int main() {
	unsigned int diamond{ 6000 }; //钻石数量
	unsigned int vip_exp{ 80000 }; //VIP充值经验
	unsigned xbase = diamond ^ vip_exp; 

	std::cout << "修改钻石数量:";
	std::cin >> diamond;
	std::cout << "修改累计消费:";
	std::cin >> vip_exp;
	//模拟检测
	unsigned realDiamond = xbase ^ vip_exp;
	unsigned realvip_exp = xbase ^ diamond;
	std::cout << "你应该的钻石数量为:" << realDiamond << std::endl;
	std::cout << "你应该的累计消费为:" << realvip_exp << std::endl;

}

四、基本数据类型和计算(三)

只要修改一个值,就可还原出来原来的数据;如果修改两个值,值虽然不会还原出来,但是也可以确认用户作弊了

四、基本数据类型和计算(三)

7、自定义数据类型(结构体)

​ 自己创建数据类型,解决基本数据类型解决不了的问题。

基本数据类型问题:假如要创建一个汽车管理系统,要定义多个品牌的车,每个品牌的属性都不一样,若只用基本数据类型,就需要将每种品牌的车都进行定义,很麻烦

#include <iostream>

int main()
{
	int wheel {19};
	unsigned price{ 100000 };
	char logo{ 'B' };
	unsigned gls{ 100 };

	std::cout << "车辆商标:" << logo << "  车轮大小:" << wheel << "  车辆售价:" << price << std::endl;

	int wheelA{ 20 };
	unsigned priceA{ 900000 };
	char logoA{ 'C' };
	unsigned glsA{ 200 };

	std::cout << "车辆商标:" << logoA << "  车轮大小:" << wheelA << "  车辆售价:" << priceA << std::endl;
}

四、基本数据类型和计算(三)

1)结构体定义及使用

//结构体的定义方法
struct 名称
{
    类型 名称;
}
//结构体类型使用
结构体名称 变量名{初始化值};

//简单案例
struct CAR      //结构体定义
{
		char logo{ 'X'};       
		unsigned short whell{ 19 };
		unsigned price{ 90000 };
};

CAR carA{'A',20,80000} //结构体变量初始化
std::cout<<carA::log<<std::endl;  //结构体变量的使用

3)结构体使用

#include <iostream>

int main() {
	struct Car            //结构体类型的定义
	{
		char logo{ 'X' };
		unsigned short whell{ 19 };
		unsigned price{ 90000 };
	};

	Car carA{ 'X',25,5000000 };    //结构体类型变量的定义及初始化
	Car carB{ 'Y',30,4000000 };
	Car carC{ 'Z',15,200000 };

	//结构体变量的使用
	std::cout << "A车辆logo:" << carA.logo << ",A车辆轮子:" << carA.whell << ",A车辆售价:" << carA.price << std::endl;
	std::cout << "B车辆logo:" << carB.logo << ",B车辆轮子:" << carB.whell << ",B车辆售价:" << carB.price << std::endl;
	std::cout << "C车辆logo:" << carC.logo << ",C车辆轮子:" << carC.whell << ",C车辆售价:" << carC.price << std::endl;
}

四、基本数据类型和计算(三)

2)结构体的本质

①结构体的本质是按照我们自己定义的方式定义一块连续的内存的结构

②声明一个结构体变量的本质是向计算机申请一块内存,而这块内存的大小,至少是我们定义的结构成员需要占用的内存之和(某些情况内存会虚高)

③使用结构体,则是按照我们定义好的方式从这块内存读取和写入数据

8、案例:设计游戏角色数据

​ 为麟江湖游戏设计角色的基本属性,角色包括一下属性:

①等级(1-100级)

②门派(武当、峨眉、少林、葵花、唐门)

③武器(0-15阶,0-15强化),护甲(0-15阶,0-15强化),首饰(0-15阶,0-15强化)

④经验值 ⑤生命值 ⑥生命最大值 ⑦内力值 ⑧内力最大值 ⑨坐标 ⑩金币 ⑪ 钻石 ⑫ 幸运值 ⑬ 累计消费

#include <iostream>

//门派定义
enum class SCHOOL :char {
	wudang,
	emei,
	kuihua,
	tangmen,
	shaolin,
};

//装备定义
struct Equip
{
	unsigned char lv{ 0 }; //装备等级
	unsigned char ev{ 0 }; //装备强化等级
};

//角色状态定义
struct RoleState
{
	int value{ 1000 }; //角色生命值
	unsigned maxValue{ 1000 }; //角色最大生命值
};

//角色定义
struct Role {
	unsigned char lv{ 1 }; //角色等级
	SCHOOL school{ SCHOOL::tangmen };  //门派
	Equip  weapon{ 1,1 }; //武器等级、强化等级
	Equip  army{ 1,10 };  //布甲等级、强化等级
	Equip neck{ 1,10 };    //
	long long exp{ 0 };
	RoleState HP{ 1000,1000 }; //角色血量、最大生命值
	RoleState MP{ 1000,1000 }; //角色蓝量、最大蓝量
	unsigned x{ 500 }; //横坐标
	unsigned y{ 500 }; //纵坐标
	unsigned Money{ 1000 }; //金币数
	unsigned Diamond{ 100 }; //钻石数
	unsigned char luck{ 2 };//幸运值
	unsigned vip_exp{ 0 }; //充值经验

};

int main() {

	Role user;  //定义结构体时,已完成初始化,此处可以不用初始化
	std::cout << "生命:" << user.HP.value << "/" << user.HP.maxValue << std::endl;
	std::cout << "内力:" << user.MP.value << "/" << user.MP.maxValue << std::endl;
	std::cout << "坐标:【" << user.x << "】【" << user.y << "】" << std::endl;

}

ser.school = SCHOOL::wudang; //修改角色门派

四、基本数据类型和计算(三)

四、基本数据类型和计算(三)文章来源地址https://www.toymoban.com/news/detail-746053.html

到了这里,关于四、基本数据类型和计算(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python基础教程:基本数字类型与数值计算,Pythonui基础

    print(isinstance(a,int)) print(isinstance(b,str)) 执行结果: class ‘int’ class ‘float’ class ‘bool’ class ‘complex’ True False 两者的区别: type()不会认为子类是一种父类类型。 isinstance()会认为子类是一种父类类型。 class A: pass class B(A): pass print(isinstance(A(),A)) print(type(A()) == A) print(isinstan

    2024年04月17日
    浏览(27)
  • 基本数据类型转换(基本数据类型之间的运算规则)

    前提:这里讨论只是7种基本数据类型变量间的运算。不包含boolean类型的。   自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为: 有多种类型的数据混合运算时,系统首先自动将所有数据 转换成容量最大的那种数据类型,然后再进行计

    2024年02月15日
    浏览(28)
  • 探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)

    欢迎阅读本篇博客,我们将深入探讨MATLAB语言的基础知识与实用技能,旨在帮助初学者、初中级MATLAB程序员以及在校大学生系统地掌握这门强大的科学计算与数据可视化工具。 一、MATLAB的基础知识 1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环 二、MATLAB的实用技能

    2024年03月12日
    浏览(44)
  • JavaScript引用数据类型(对象类型)和原始(基本)数据类型特点比较

    为讲解JavaScript引用数据类型(对象类型)和原始(基本)数据类型特点比较,需要先回顾JavaScript数据类型有哪些? 一)原始(primitive:原始、基本)数据类型,也称为原始值(primitive value),包括: 1.布尔值(Boolean),其字面值只有两个,分别是true和false。 2.null,Null类型

    2024年02月05日
    浏览(35)
  • 基本数据类型和包装类型 使用规范

    自动装箱(Autoboxing)和拆箱(Unboxing)是Java中用于在基本数据类型和其对应的包装类型之间进行转换的机制。这两种机制的目的是使代码更简洁和易读,同时提供类型安全性。 1、自动装箱:将基本数据类型的值自动封装成相应的包装类型对象。例如,将 int 转换为 Integer,将

    2024年02月09日
    浏览(30)
  • 【python基础】基本数据类型-数字类型

    视频讲解 数字类型 Python3 支持int(整型数据)、float(浮点型数据)、bool(布尔类型) 在Python 3里, 只有一种整数类型 int,表示为长整型 。像大多数语言一样,数值类型的赋值和计算都是很直观的。 编写程序如下所示: 这里需要注意的是 数值的除法运算,包含两个运算符:/ 返回

    2024年02月06日
    浏览(32)
  • Java基础篇_1.2——保留关键字、基本数据类型、基本数据类型之间的转换

    目录 一、保留 二、Java的基本数据类型 三、引用数据类型  四、基本数据类型间的转换  隐含强制类型转换 数值之间的合法转换 Java该语言是用 Unicode 字符集编写的。 Java是预先定义的具有特别意义的标识符,也被称为Java保留字,Java不能用作变量名、方

    2024年02月14日
    浏览(35)
  • 二、GoLang输出HelloWorld、基本数据类型、变量常量定义、基本类型转换

    go语言中,想要输出内容到控制台,package必须是main,包括方法名也必须是main, go语言输出的语法是 fmt 库。 Go语言的基本类型有: boolean:布尔类型 true / false string :字符串类型 数值型: int8:有符号8位整型(-128到127)长度 int16:有符号16位整型(-32768到32767)长度 int32:有

    2024年02月09日
    浏览(42)
  • Redis(二)—— 五大基本数据类型和三大特殊数据类型

    1、常用命令  批量操作: redis可以定义对象  方式(一) :以JSON格式(其实就是key-value格式)保存一个对象 方式(二) : 把对象的两个属性定义成两个key 注意,如果采用第一种方式,那么无法单独取出字段哦~ 2、使用场景 数字int类型的string作为计数器,比如统计文章的

    2024年02月15日
    浏览(27)
  • 【python基础】基本数据类型-字符串类型

    视频讲解: 字符串数据类型01 字符串就是一系列字符。在python中,用引号括起来文本内容的都是字符串。 其语法格式为:‘文本内容’或者“文本内容” 编写程序如下所示 我们发现其中的引号可以是单引号,也可以是双引号。这样的灵活性可以使我们进行引号之间的嵌套。

    2024年02月06日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包