目录
- 1、基本内置类型
- (1)算术类型
- A.整型
- B.浮点型
- (2)字面值常量
- A.整型字面值
- B.字符字面值
- C.指定字面值类型
- (3)常量
- A.What(什么是常量)
- B.Why(常量有什么用)
- C.常量表达式和constexpr
- 2、复合数据类型
- (1)指针
- A.What(什么是指针)
- B.Which(有哪些指针)
- (2)引用
- A.What(什么是引用)
- B.How(如何使用)
- (3)指针和引用的关系
- A.对立性
- B.统一性
- 3、枚举类型
- (1)What(什么是枚举)
- (2)Which & How(枚举种类和使用)
- A.限定性枚举类型
- B.非限定性枚举类型
- (3)Why(枚举类型的作用)
- 4、自定义数据类型
- (1)类
- A.面向对象的四大特征
- B.What(什么是类)
- C.Why(类的作用)
- (2)结构体
- 5、处理类型
- (1)类型别名
- (2)auto
- (3)decltype
- 6、数据类型转换
1、基本内置类型
(1)算术类型
bool,char(1Byte),wchar_t(2Byte),char16_t(2Byte),char32_t(8Byte)
short(2Byte),int(2Byte | 4Byte),long(4Byte),long long(8Byte)
float(4Byte,6位有效数字),double(8Byte,10位有效数字)
A.整型
bool、char、short、int、long、long long、unsigned *
B.浮点型
float、double、unsigned *
(2)字面值常量
A.整型字面值
八进制:024; 十进制:20; 十六进制:0x14
B.字符字面值
- 单字符字面值:
‘a’、’A’、’0‘
- 转义字符字面值:
\n、\t\v(制表符)、\'(单引号)、\"(双引号)、\a(响铃)、\b(退格符)、\?(问号)、\r(回车符)
- 布尔字面值:
false、true
- 指针字面值:
nullptr
C.指定字面值类型
前缀指定:
u’w’--------------------------char16_t
U’w’-------------------------char32_t
L‘w’--------------------------wchar_t
u8‘w’------------------------char
后缀指定:
120u or 120U-------------usigned
1978l or 1978L-----------long
128100000000-----------long long
128.1f----------------------float
128.1F---------------------float
1998.12L------------------long double
1998.12l------------------long double
(3)常量
A.What(什么是常量)
被const修饰关键字修饰的变量。既然是常量,那么在创建的时候就必须被初始化。
涉及到指针常量时,需区分顶层指针和底层指针
**顶层指针:**指针本身就是一个常量
int a=10;
int const *ptr = &a;
**底层指针:**指针所指向的是一个常量
const a = 10;
const int *ptr = &a;
B.Why(常量有什么用)
安全性:保护特定数据不被修改
可读性:提高代码的可读性
可维护性:便于修改字面常量的值
C.常量表达式和constexpr
What(常量表达式)
在编译过程中就得到了计算结果的表达式,且其值不会改变
如:
const int maxValue = 300; //maxValue是常量表达式
const int limit = maxValue + 20; //limit也是一个常量表达式
constexpr关键字
用constexpr关键字声明的变量,一定是一个常量
const int *p = nullptr; //p是一个指向整型常量的指针(指针本身不是常量)
consntexpr int *q = nullptr; //q本身是一个常量
2、复合数据类型
(1)指针
A.What(什么是指针)
用于存放对象地址的复合数据类型
B.Which(有哪些指针)
空指针:
int *p = nullptr; int *p = 0;(不指向任何对象)
void *:
void *:double dAngle = -180.0; void * p = &dAngle;(万能指针,可指向任意类型的指针)
底层指针:
const int a=10;
const int *p = &a; //指针指向的是一个常量
顶层指针:
int a = 10;
int const *p=&a; //指针本身就是一个常量类型的指针,不能被重新赋地址
(2)引用
A.What(什么是引用)
引用是变量的别名,在定义的时候就一定要被初始化。
B.How(如何使用)
int a = 10;
int &ra = a;
(3)指针和引用的关系
核心思想:指针是一个对象,而引用不是对象
A.对立性
初始化:指针可以不进行初始化;引用一定要进行初始化
重新赋值:指针可以被重新赋值;引用被初始化后不允许被重新赋值
B.统一性
两者都是对其它对象的间接访问
3、枚举类型
(1)What(什么是枚举)
本质:一组整型字面值常量
(2)Which & How(枚举种类和使用)
A.限定性枚举类型
What:
必须显式地使用作用域解析符(::)访问枚举值
How:
enum class EnumName{enum01,enum02,...}; //默认值从0开始递增
注意:限定性枚举类型禁止隐式转换,只能显式强制转换
EnumName eName = EnumName::enum01;
int iName = (int)eName;
B.非限定性枚举类型
What:
非限定性枚举值在相同作用域共享命名空间,无需作用域解析符就能访问
How:
enum WeekDay = {Monday = 1, TuesDay = 3, Wednesday, Thursday, Friday};
WeekDay wDay = Monday; //可直接访问枚举值
std::cout<<wDay<<std::endl; //打印:1
wDay = Friday;
std::cout<<wDay<<std::endl; //打印:6
(3)Why(枚举类型的作用)
用于限定可取值的范围,增加代码的可读性和可维护性
4、自定义数据类型
(1)类
A.面向对象的四大特征
谈到类,就必须讲一下面向对象,而面向对象的四大特征我们必须掌握
抽象:将现实世界中复杂的问题简化为可管理的模块或类
封装:保护对象状态不被外部直接修改,提高程序的安全性和鲁棒性
继承:提高代码的可重用性,有利于程序的维护
多态:同一方法或操作符在不同对象执行时可产生不同的行为,多态是设计模式的基础
B.What(什么是类)
一种封装了数据变量和函数的自定义数据结构
C.Why(类的作用)
- 鲁棒性和安全性:封装数据和方法,隐藏内部实现细节,暴露必要的接口给外部
- 抽象和建模:用于解决现实世界中的问题
- 重用性:继承允许代码重用
(2)结构体
结构体struct和类的唯一区别:成员默认的访问权限不同,类的默认权限是private,而struct的默认权限是public
5、处理类型
(1)类型别名
typedef:
typedef unsigned Year;
Year yearNow = 2024; //Year就是double的别名
using:
using Year = int;
Year yearNow = 2024;
(2)auto
让编译器替我们分析表达式的数据类型
std::vector<int> vYear{1949, 1976, 1978, 1998, 2001, 2008, 2015, 2020, 2024, 2026};
for(auto &year: vYear)
{std::cout<<year<<std::endl;
}
(3)decltype
根据已知的变量推断类型
const int year = 1978;
decltype(year) yNow = 2024;