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、基本内置类型

(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、数据类型转换

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TP8 把网址生成二维码 Endroid/QrCode

composer require endroid/qr-code //二维码 use Endroid\QrCode\QrCode; use Endroid\QrCode\Writer\PngWriter; use Endroid\QrCode\Encoding\Encoding; public static function CreateQRcode(string $url,array $postData[],int $type0){// 待转换的网址$url https://www.…

CMake宏定义与预定义的宏

文章目录 前言宏定义命令CMake预定义宏 总结 前言 CMake是一个开源的、跨平台的自动化构建系统&#xff0c;它用于控制编译过程&#xff0c;使得源代码能够独立于计算机和编译器进行编译。在CMake中&#xff0c;宏&#xff08;Macro&#xff09;和函数&#xff08;Function&am…

【LeetCode】分发糖果

目录 一、题目二、解法完整代码 一、题目 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。 相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子…

致远互联FE协作办公平台 codeMoreWidget SQL注入致RCE漏洞复现

0x01 产品简介 致远互联FE协作办公平台是一款为企业提供全方位协同办公解决方案的产品。它集成了多个功能模块&#xff0c;旨在帮助企业实现高效的团队协作、信息共享和文档管理。 0x02 漏洞概述 致远互联FE协作办公平台 codeMoreWidget.jsp接口处存在SQL注入漏洞,未经授权攻…

Python数据分析案例47——笔记本电脑价格影响因素分析

案例背景 博主对电脑的价格和配置一直略有研究&#xff0c;正好最近也有笔记本电脑相关的数据&#xff0c;想着来做点分析吧&#xff0c;写成一个案例。基本上描述性统计&#xff0c;画图&#xff0c;分组聚合&#xff0c;机器学习&#xff0c;交叉验证&#xff0c;搜索超参数…

SpringBoot异常处理

一、自定义错误页面 SpringBoot默认的处理异常的机制&#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求&#xff0c;然后跳转…

鸿蒙开发设备管理:【@ohos.distributedHardware.deviceManager (设备管理)】

设备管理 本模块提供分布式设备管理能力。 系统应用可调用接口实现如下功能&#xff1a; 注册和解除注册设备上下线变化监听发现周边不可信设备认证和取消认证设备查询可信设备列表查询本地设备信息&#xff0c;包括设备名称&#xff0c;设备类型和设备标识 说明&#xff1a…

IIC学习笔记(立创STMF4开发板)

目录 #I2C涉及相关知识 #I2C相关介绍 欢迎指正&#xff0c;希望对你&#xff0c;有所帮助&#xff01;&#xff01;&#xff01; 个人学习笔记&#xff0c;参考文献&#xff0c;链接最后&#xff01;&#xff01;&#xff01; #I2C涉及相关知识 SDA串行数据线&#xff1a; Ser…

leetcode226反转二叉树

本文主要讲解反转二叉树的要点与细节&#xff0c;按照步骤思考更方便理解 c和java代码如下&#xff0c;末尾 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 具体要点&#xff1a; 1. 首先我们要理解题意&#xff0c; 反转二叉树具体…

MyBatis-Plus:快速入门

1. 概念 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。其突出的特性如下&#xff1a; * **无侵入**&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有…

昇思25天学习打卡营第11天|基于MindSpore通过GPT实现情感分类

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) 基于MindSpore通过GPT实现情感分类 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninsta…

Kubernetes面试整理-RBAC(基于角色的访问控制) 的理解和配置方法

在 Kubernetes 中,RBAC(基于角色的访问控制,Role-Based Access Control)是一种控制访问权限的机制,用于管理用户和服务账户对集群资源的访问。RBAC 通过定义角色和角色绑定来控制谁可以对哪些资源执行哪些操作。 核心概念 1. Role 和 ClusterRole: ● Role:定义在特定命…

java基于微信小程序+mysql+RocketMQ开发的医院智能问诊系统源码 智能导诊系统 智能导诊小程序源码

java基于微信小程序mysqlRocketMQ开发的医院智能问诊系统源码 智能导诊系统 智能导诊小程序源码 医院导诊系统是一种基于互联网和定位技术的智能化服务系统&#xff0c;旨在为患者提供精准、便捷的医院内部导航和医疗就诊咨询服务。该系统整合了医院的各种医疗服务资源&#x…

【软件实施】软件实施概论

目录 软件实施概述定义主要工作软件项目的实施工作区别于一般的项目&#xff08;如&#xff1a;房地产工程项目&#xff09;软件实施的重要性挑战与对策软件项目实施的流程软件项目实施的周期 软件企业软件企业分类产品型软件企业业务特点产品型软件企业的分类产品型软件企业的…

PortSip测试

安装PBX 下载 免费下载 PortSIP PBX 安装PBX&#xff0c;安装后&#xff0c;运行 &#xff0c;默认用户是admin 密码是admin&#xff0c;然后配置IP 为192.168.0.189 设置域名为192.168.0.189 配置分机 添加分机&#xff0c;添加了10001、10002、9999 三个分机&#xff0c…

Android Studio中使用命令行gradle查看签名信息

Android Studio中使用命令行gradle查看签名信息&#xff1a; 使用 Gradle 插件生成签名报告 打开 Android Studio 的 Terminal。 运行以下命令&#xff1a;./gradlew signingReport 将生成一个签名报告&#xff0c;其中包含 MD5、SHA1 和 SHA-256 的信息。 如果失败&#xf…

10分钟完成微信JSAPI支付对接过程-JAVA后端接口

引入架包 <dependency><groupId>com.github.javen205</groupId><artifactId>IJPay-WxPay</artifactId><version>${ijapy.version}</version></dependency>配置类 package com.joolun.web.config;import org.springframework.b…

【递归、搜索与回溯】记忆化搜索

记忆化搜索 1.记忆化搜索2.不同路径3.最长递增子序列4. 猜数字大小 II5.矩阵中的最长递增路径 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603;…

5000字深入讲解:企业数字化转型优先从哪个板块开始?

很多企业都知道数字化转型重要&#xff0c;但不知道应该怎样入手&#xff0c;分哪些阶段。以下引用国内领先数字化服务商 织信Informat 的数字化转型方法论材料&#xff0c;且看看他们是如何看待数字化转型的&#xff1f;数字化转型应该从哪先开始&#xff1f;如何做&#xff1…

Java中的类与接口:抽象与实现的艺术

Java中的类与接口&#xff1a;抽象与实现的艺术 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中类与接口的设计原则&#xff0c;以及如…