C++知识点总结 (01):数据类型、数据类型转换和变量

目录

  • 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)显式转换
      • A.一般形式的显式转换:
      • B.static_cast:
      • C.dynamic_cast:
      • D.const_cast:
      • E.reinterpret_cast:
    • (2)隐式转换
      • A.一般隐式转换:
      • B.数组转指针:
    • (3)算术转换
      • A.What(什么是算术转换)
      • B.整型提升
  • 7、变量
    • (1)变量的声明
    • (2)变量的定义
    • (3)变量的类型
      • A.全局变量
      • B.局部变量

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;

6、数据类型转换

(1)显式转换

A.一般形式的显式转换:

int(dDeficit) 或者 (int)dDeficit;

double dDeficit = 128.1;
int iDeficit = (int)dDeficit; //或者 int iDeficit = int(dDeficit);

B.static_cast:

static_cast只要不包含底层的const,都可以使用,即不能去掉底层const的常量属性,也不能将常规指针转换为底层指针(const double *pd)

double dDeficit = 128.1;
void *p = &dDeficit;
double *pd = static_cast<double*>(p);

C.dynamic_cast:

当进行向下转型(父类对象转为子类对象)时,如果基类指针或引用指向派生类对象,则转换成功。否则转换失败,返回的是空指针。

Base *basePtr = new Derived();
Derived *derivePtr = dynamic_cast<Derived*>(basePtr);
if(derivePtr==nullptr) std::cerr<<"转换失败"<<std::endl;
else std::cout<<"转换成功"<<std::endl;

D.const_cast:

改变底层const,将常量对象转换为非常量对象,static_cast无法实现const_cast的功能

  • 去掉底层const的const:
const char * pc;
char *p = const_cast<char*>(pc);
  • 为常规指针添加const属性:
char *p;
const *pc = const_cast<const char*>(p);

E.reinterpret_cast:

可以在任意指针类型引用类型之间进行转换,但不具有可移植性(不同平台可能不通用),并且不安全

double* pd = &dDeficit;
int *pi = reinterpret_cast<int*>(pd);

注意:仅适用于指针类型和引用类型

(2)隐式转换

A.一般隐式转换:

double dDeficit = 128.1;
int iDeficit = dDeficit;

B.数组转指针:

int a[10] = {0,1,2,3,4,5,6,7,8,9};
int *pa = a; //指向数组的首元素

(3)算术转换

A.What(什么是算术转换)

一种算术类型转换成另一种算术类型,都将转换成最宽的类型进行运算

B.整型提升

把小整型提升为较大的整型:
char、signedchar、usignedchar、short、unsignedshort 等会自动提升为 int/unsignedint

char a = 10;
int iYear = 1966;
int iSunLv = a + iYear; //1976

7、变量

(1)变量的声明

extern int i; //声明变量i,而非定义

(2)变量的定义

int i; //变量的定义

(3)变量的类型

A.全局变量

在整个程序中起作用,即作用域的是全局的(全局都可以访问全局变量)

B.局部变量

只在代码块中起作用,在代码块中访问全局变量(只有代码块中才能访问局部变量)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/755949.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为仓颉编程语言正式发布,仓颉编程教程

目录 前言 基本概念 标识符 变量 类型 基础数据类型 表达式 if 表达式 while 表达式 for-in 表达式 程序结构 函数 定义函数 调用函数 lambda表达式 应用实例&#xff08;遍历目录&#xff09; 枚举 定义与实例化 成员访问规则 match表达式 应用实例&…

Python现在可以在线编程了!

你好&#xff0c;我是郭震 1 在线编程 在线编程好处&#xff1a; 1 无需安装和配置环境: 在线编程平台不需要用户在本地安装任何软件或配置开发环境。这对初学者和那些希望快速上手进行编程的人非常有利。 2 跨平台兼容性: 这些平台可以在任何具有互联网连接的设备上使用&#…

恢复机制-数据库系统中的故障(事务故障、系统故障、介质故障)、一致性错误、窃取但不强制的缓冲区管理策略

一、引言 数据库管理系统DBMS的事务处理技术实现的一个主要功能部分就是恢复机制&#xff0c;恢复机制完成的功能就是对发生故障后系统中事务的更新结果进行数据恢复&#xff0c;保证事务的原子性和持久性&#xff0c;从而进一步保证数据库的一致性。 数据库系统与其他计算机系…

Websocket解析及用法(封装一个通用订阅发布主题的webSocket类)

1、什么是WebSocket? websocket的目标是通过一个长连接实现与服务器全双工&#xff0c;双向的通信。是一种在单个TCP连接上进行全双工通信的协议&#xff0c;使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在 js中创建websocket…

日期类(java)

文章目录 第一代日期类 Date常用构造方法SimpleDateFormat 日期格式化类日期转字符串&#xff08;String -> Date)字符串转日期 (String->Date) 第二代日期类 Calendar常用字段与如何得到实例对象相关 API 第三代日期类&#xff08;LocalDate\TIme)日期&#xff0c;时间&…

【详细教程】如何使用YOLOv10进行图片与视频的目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

什么是DEQ?

DEQ (Delivered Ex Quay, Duty Paid) 是指目的港码头交货 (……指定目的港)。 这种术语规定卖方在指定目的港码头将货物交给买方处置&#xff0c;并且不办理进口清关手续。 DEQ适用范围 DEQ术语仅适用于海运、内河运输或多式联运&#xff0c;并且在目的港码头卸货时使用。如…

uniapp,uni-fab组件拖动属性,替代方案

文章目录 1. 背景2. 替代方案2.1 方案一2.2 方案二参考1. 背景 最近基于uniapp开发一款设备参数调试的APP软件,其中有使用到悬浮按钮,快速开发阶段,为了能尽快上线,直接使用了uni-ui的扩展组件uni-fab,参考【1】,效果如下图: 后期,相应的界面内容增多,由于uni-fab是…

简单科普-GPT到底是什么?

1.ChatGPT ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;是OpenAI研发的一款聊天机器人程序 &#xff0c;于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够基于在预训练阶段所见…

通天星CMSV6车载监控平台CompanyList信息泄露漏洞

1 漏洞描述 通天星CMSV6车载视频监控平台是东莞市通天星软件科技有限公司研发的监控平台,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频综合平台。通天星科技应用于公交车车载、校车车载、大巴车车载、物流车载、油品运输车载、警车车…

昇思25天学习打卡营第5天|MindSpore-ResNet50图像分类

MindSpore-ResNet50图像分类 CIFAR-10数据集 CIFAR-10数据集是一个广泛使用的图像分类数据集,它包含了60,000张32x32的RGB彩色图像,分为10个类别,每个类别有6,000张图像。这些类别包括飞机(airplane)、汽车(automobile)、鸟类(bird)、猫(cat)、鹿(deer)、狗(dog…

最新测评!不可错过的三款网络代理服务商

在如今数字化高速发展的时代&#xff0c;网络代理服务已经成为许多企业和个人在进行网络活动时不可或缺的工具。为了给大家提供更具参考价值的推荐&#xff0c;我们的测评团队经过深入研究和实际测试&#xff0c;精心挑选了三款表现出色的网络代理服务商——极光HTTP、全民HTTP…

软件工程 例题

用例图 1. 某个学生成绩管理系统的部分参与者和用例总结如下。 教务管理人员: 登录系统教师、学生名单管理学期教学计划管理成绩管理。课程分配&#xff0c;每次课程分配时都必须打印任课通知书 学生&#xff1a; 登录系统选课。 教师: 登录系统成绩管理&#xff0c;并…

昇思25天学习打卡营第3天|网络构建

学习目标&#xff1a;熟练掌握网络构建方法 了解mindspore.nn 实例构建简单的神经网络 网络模型中各层参数 昇思大模型平台 AI实验室 学习记录&#xff1a; 一、关于mindspore.nn 在MindSpore中&#xff0c;Cell类是构建所有网络的基类&#xff0c;也是网络的基本单元。cell…

如何集成CppCheck到visual studio中

1.CPPCheck安装 在Cppcheck官方网站下载最新版本1.70&#xff0c;官网链接&#xff1a;http://cppcheck.sourceforge.net/ 安装Cppcheck 2.集成步骤 打开VS&#xff0c;菜单栏工具->外部工具->添加&#xff0c;按照下图设置&#xff0c;记得勾选“使用输出窗口” 2.…

高效数据采集监控平台 一体化平台 数据可视化!

提高工作效率&#xff0c;一直是各种厂家在寻找的方法。任何一种有效且实用的方法都值得去尝试。数据采集监控平台是一种能高效处理数据的方式&#xff0c;其主要工作内容是从各个产生数据的仪器设备传感器中采集数据、对数据进行集中整理整合、分析、显示、绘制图表、存储、传…

ubuntu22.04速装中文输入法

附送ubuntu安装chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome-stable_current_amd64.deb

如何做互联网项目需求评估?

关于互联网项目需求评估&#xff0c;我们可以按照以下步骤进行&#xff1a; 一、确定项目主题和目标受众&#xff1a;这篇文章首先要明确你要评估的互联网项目的主题是什么&#xff0c;你的目标受众是谁&#xff1f;你需要对项目的背景和目的有清晰的了解。 二、项目规模和内…

将TensorFlow嵌入到Jupyter Notebook中,个人学习记录

起因是学习吴恩达机器学习过程中&#xff0c;在神经网络tensorflow的部分&#xff0c;需要在Jupyter Notebook中跑相关的代码&#xff0c;于是在网上找了很多资料&#xff0c;终于跑成功了。该笔记仅为个人学习记录&#xff0c;如有任何问题请见谅。 import numpy as np impor…

如何3分钟上手传得神乎其神的AI绘画!一篇文章带你搞懂!

前言 今年 AI 绘画绝对是大火的概念之一&#xff0c;这次加入了生财 AI 绘画小航海的船&#xff0c;今天是体验的第1天&#xff0c;那么 AI 绘画是什么呢&#xff1f; 简单来说就是利用 AI 实现绘画&#xff0c;在特定的软件或者程序中&#xff0c;输入一定的关键词或者指令&…