0821|C++day1 初步认识C++
一、思维导图
二、知识点回顾
【1】QT软件的使用
1)创建文件
创建文件时,文件的路径一定是全英文
2)修改编码
工具--->选项--->行为--->默认编码:system
【2】C++和C的区别
C++又叫C plus plus,C++是对C的扩充,几乎支持所有的C语言语法
C语言:面向过程语言 ------>偏重解决问题的步骤
C++:面向对象语言 ------>求解的方法面向对象的三大特征:封装、继承和多态
抽象------>可以作为面向对象语言的第四个特征
1)C++对C的扩充
- 命名空间(解决命名冲突/命名污染)
- 函数重载(用于解决同一功能函数,可以定义相同名字,运算符重载)
- 引用(和C中的指针有关系)
- 面向对象的特征
- 泛式编程
- 模板编程(模板类和模板函数)
- STL标准模板库
2)C++对C的兼容
- C++几乎支持所有C语法
- g++是C++使用的编译器,比gcc更加严格
- <stdio.h>头文件,在C++中仍然可以使用,C中的所有头文件在C++中都可以使用,把头文件后面的.h去掉,前面加c,<string.h> ----<cstring>
- C++文件的后缀是.cpp,C语言是.c后缀
【3】第一个C++程序
1)hello world
#include <iostream>
//#:预处理标识符
//<iostream>:输入输出流类所在的头文件
//istream:输入流类
//ostream:输出流类using namespace std; //std:标准命名空间
//using使用命名空间
//namespace就是命名空间的关键字
//std是标准命名空间名int main()
{cout << "第一个C++程序" << endl;//cout:ostream类的一个类对象,输出,但是不需要格式符// <<:左移运算符的重载,重载为插入运算符(输出运算符)cout << "Hello World!" << endl;return 0;
}
2)cout标准输出流对象
i)介绍
由ostream类提供的C++中的标准输出流的类对象,但是只有头文件不能直接使用cout,还需要添加std,cout还包含在std命名空间中
ii)运算
ostream类对左移运算符进行了重载,重载后
iii)cout的使用
不需要任何格式符,直接使用cout和
cout endl就是换行
iv)使用cout指定格式的输出
- 通过函数,需要头文件
- 通过关键字
#include <iostream>
#include <iomanip>
using namespace std;int main()
{int a = 16;cout << a << endl; //16
// ----------------通过关键字控制格式------------------------cout << hex << a << endl; //10 hex十六进制输出cout << a << endl; //10 ---->因为上一行的cout已经指定了格式,如果想结束掉上述的格式,重新指定格式cout << dec << a << endl; //dec表示十进制的输出cout << oct << a << endl; //oct表示八进制输出cout << "-----------------------------" << endl;
// ----------------通过函数控制格式------------------------cout << setbase(16) << a << endl;cout << setbase(8) << a << endl;cout << a << endl; //20,使用函数仍然改变了cout的输出格式cout << setbase(10) << a << endl;cout << "指定宽度的输出<==>%nd" << endl;cout << setw(4) << left << a ; //功能和%-4d一样,左对齐使用left,如果不加left默认是右对齐cout << "小数的指定宽度输出 " << endl;cout << setprecision(4) << 3.1456 << endl;//指定的是包含小数点的位置,3.146return 0;
}
练习:输出斐波那契的前10项
1 1 2 3 5 8 13 ····
#include <iostream>using namespace std;int main()
{int arr[10];int i = 0;for(i=0;i<10;i++){if(i==0 || i==1){arr[i]=1;}elsearr[i]=arr[i-2]+arr[i-1];cout << arr[i] << endl;}return 0;
}
3)cin标准输入流对象
相当于C中scanf
cin是由istream提供类对象,和cout一样,都存在于std标准命名空间中
#include <iostream>
#include <cstdio>
using namespace std;int main()
{int a;//scanf("%d",&a); //需要控制格式cin >> a; //cin加上右移运算符重载,再加上变量名,使用cin输入不需要加变量的地址cout << a << endl;char c;cin >> c; //cin可以实现任意类型的输入cout << "从终端获取的字符c=" << c << endl;return 0;
}
练习:终端输入一个字符,判断该字符的类型,字母(大写/小写)、数字字符,其他字符
#include <iostream>
#include <cstdio>
using namespace std;int main()
{char a;//scanf("%d",&a); //需要控制格式cin >> a; //cin加上右移运算符重载,再加上变量名,使用cin输入不需要加变量的地址if(a>='0'&&a<='9'){cout << "a是一个数字" << endl;}else if(a>='A'&&a<='Z'){cout << "a是一个大写字母" << endl;}else if(a>='a'&&a<='z'){cout << "a是一个小写字母" << endl;}return 0;
}
【4】命名空间
1) 介绍
using namespace std;
using使用命名空间中的标识符
std标准命名空间
为了使用cout和cin、endl、string
2) 定义
namespace 命名空间名
{变量名;函数;结构体;枚举名;
}:: 域限定符
命名空间中的函数,可以在命名空间中声明,在命名空间外实现
3) 使用命名空间
① 全局引入命名空间
- 引入命名空间的位置,不包在任何花括号内
- 直接使用using引入整个命名空间中的标识符
- using namespace 命名空间名;
- 在该语句下的所有语句,都可以直接使用命名空间中的标识符
② 引入命名空间中的部分标识符
- using 命名空间名+标识符名; 在该语句下的所有语句,可以使用命名空间中的部分标识符
- 在哪个位置使用,在哪写域限定符
std::cout
4)命名空间冲突问题
① 局部变量和命名空间冲突
即使引入了命名空间,但是在使用时,默认使用局部变量,如果想要使用命名空间中的变量,命名空间名+域限定符
#include <iostream>
//using namespace std;namespace my_namespace { //定义了一个命名空间int a=2000;int num2;void fun(); //命名空间中写函数的声明
}void my_namespace::fun() //定义了一个命名空间中的函数
{std::cout << "test" << std::endl;
}using namespace my_namespace; //引入命名空间中的所有标识符
using my_namespace::num2; //引入命名空间中的部分标识符int main()
{using std::cout; //引入std中的cout标识符using std::endl; //引入std中的endl标识符int a = 90;cout << "局部变量a=" << a << endl;cout << my_namespace::a << endl;fun();return 0;
}
② 两个命名空间中命名冲突问题
报错信息:
main.cpp:30:13: error: reference to 'num2' is ambiguous
main.cpp:7:10: note: candidate found by name lookup is 'my_namespace::num2'
main.cpp:12:10: note: candidate found by name lookup is 'B::num2'
冲突的命名空间:
namespace my_namespace { //定义了一个命名空间int a=2000;int num2;void fun(); //命名空间中写函数的声明
}namespace B {int num2;
}
1、只引入某一个命名空间,只能使用引入的命名空间中的标识符
using namespace B; //只能使用B中的num2
2、直接在使用变量时,说明使用哪一个命名空间中的标识符
命名空间名+域限定符
int main()
{my_namespace::num2=900; //在使用变量时,使用域限定符cout << B::num2 << endl;return 0;
}
iii)全局变量和命名空间冲突问题
- 如果冲突,可以选择不引入命名空间,只能使用全局的变量
- 既要引入命名空间,又要使用全局变量,给全局变量前加域限定符(全局变量默认和匿名空间存在一起,::),访问命名空间中的变量,使用:命名空间名+域限定符
#include <iostream>
using namespace std;int a = 3000;
namespace my_namespace { //定义了一个命名空间int a=2000;int num2;void fun(); //命名空间中写函数的声明
}namespace B {int num2;
}
void my_namespace::fun() //定义了一个命名空间中的函数
{std::cout << "test" << std::endl;
}using namespace my_namespace; //引入命名空间中的所有标识符
using namespace B;int main()
{my_namespace::num2=900; //在使用变量时,使用域限定符cout << B::num2 << endl;cout << my_namespace::a << endl; //通过域限定符和命名空间名访问指定变量acout << ::a << endl; //访问全局变量areturn 0;
}
5)字符串/C++中的string类
如果定义了多个同名的命名空间,最后多个会合并成一个命名空间
namespace B {int num2;int a = 10;
}namespace B { //并没有定义新的命名空间B,改行的B会和前面B合并成一个命名空间int b;
}
6) 命名空间的嵌套
#include <iostream>
using namespace std;namespace A { //定义了一个命名空间Aint a=0;namespace B { //嵌套一个命名空间Bint a=100;char c='a';}
}
using namespace A;
using namespace A::B; //全局引入A中的命名空间B
int main()
{//cout << A::a << endl; //0//cout << A::B::a << endl; //100,嵌套的命名空间,访问里面空间标识符时,需要逐级访问cout << c << endl;return 0;
}
7) 给命名空间重命名
typedef int a; ---->既可以使用int定义变量,也可以使用a定义变量
namespace 新名字 = 旧名字;
namespace NEW = A; //把命名空间A重命名为NEW新名字和旧名字都可以继续使用
#include <iostream>
using namespace std;namespace A { //定义了一个命名空间Aint a=0;namespace B { //嵌套一个命名空间Bint a=100;char c='a';}
}namespace NEW = A; //给命名空间A重命名为NEW
using namespace NEW;
//using namespace A::B; //全局引入A中的命名空间B
int main()
{//cout << A::a << endl; //0//cout << A::B::a << endl; //100,嵌套的命名空间,访问里面空间标识符时,需要逐级访问cout << NEW::B::c << endl;return 0;
}
8) using的其他用法
已知的用法:引入命名空间
using还可以用于类型重定义 typedef
C++11的新特性
#include <iostream>
using namespace std;int main()
{typedef int a;a num1 =100;cout << num1 << endl;using INT = int; //把基本数据类型int重定义为INT,后面可以直接使用INT定义变量INT num2 = 90;cout << sizeof(INT) << endl;return 0;
}
【5】字符串/C++中的string类
- C语言中不支持string类型
- C++中封装了string类,可以直接使用string定义变量
1) C++中字符串的定义
可以直接通过string实现
#include <iostream>
#include <cstring>
using namespace std;
int main()
{char str[]="hello"; //C语言风格的字符串,C++中仍然支持,结尾有'\0'cout << sizeof(str) << endl;cout << strlen(str) << endl; //可以手动导入<cstring>头文件,使用strlen函数//通过string类实现变量的定义string str1 = "hello"; //定义了一个string类型的饿字符串str1并初始化hellostring str2 = str;cout << str2 << endl; //C语言风格的字符串会自动转换成C++风格的字符串并且可以直接使用str2 = "hi"; //给str2字符串赋值//----------使用单个的字符给字符串赋值-----------string str3(5,'a'); //定义了一个str3字符串,使用5个a初始化cout << str3 << endl;string str4("world"); //定义了一个字符串str4,使用world初始化cout << str4 << endl;//----------多个字符串之间的赋值------------str3 = str4;cout << "s3=" << str3 << endl;cout << "s4=" << str4 << endl;
}
【2】C++风格和C风格字符串的转化
- C向C++转化,无需任何操作
- C++风格向C语言风格转化,需要c_str()/data()成员函数
#include <iostream>
#include <cstring>
using namespace std;int main()
{char str[]="hello";string str1 = str; //C风格可以直接转化为C++风格//cout << strlen(str1) << endl; //C++风格的字符串向C风格转化,需要特定的操作cout << strlen(str1.data()) << endl; //使用过data函数后,str1可以被strlen计算//cout << strcat(str1.c_str(),"world") << endl;//因为str1.c_str()返回的时hello的字符数组形式,是一个const char*char str3[100]="world";strcat(str3,str1.c_str());cout << str3 << endl;return 0;
}
3) string常用的函数
i)at()
功能:访问指定下标的元素,使用at而不用下标访问,因为at可以检查越界问题
ii)length()/size()
功能:返回字符串的长度
iii)clear()
功能:清空字符串
iv)empty()
功能:字符串的判空,空返回1,否则返回0
#include <iostream>
#include <cstring>
using namespace std;int main()
{char str[]="hello";string str1 = str; //C风格可以直接转化为C++风格
// cout << str1.at(7) << endl;cout << str1.length() << endl;cout << str1.size() << endl;str1.clear();cout << str1 << endl;cout << str1.size() << endl;cout << str1.empty() << endl;return 0;
}
4)字符串比较
#include <iostream>
#include <cstring>
using namespace std;int main()
{char str[]="hello";string str1 = str; //C风格可以直接转化为C++风格string str2 = "hi";if(str1<str2) //字符串在C++中可以直接参与比较,结果0/1{cout << "str1<str2" << endl;}return 0;
}
5)字符串的输入
- cin ------->不能获取带空格的字符串
- getline(cin,变量名) ----->可以获取带空格的字符串
#include <iostream>
#include <cstring>
using namespace std;int main()
{char str[]="hello";string str1 = str; //C风格可以直接转化为C++风格string str2;//cin >> str2; //不能实现字符串带空格的输入getline(cin,str2);cout << str2 << endl;return 0;
}
练习:终端输入一个字符串,以'\n'作为标志停止,判断字母和数字的个数,空格的个数
#include <iostream>
#include <cstring>
using namespace std;int main()
{string str;getline(cin,str);int len = str.size(); //作为循环条件int num1=0,num2=0,num3=0;for(int i=0;i<len;i++){if(str.at(i)>='a'&&str.at(i)<='z'||str.at(i)>='A'&&str.at(i)<='Z'){num1++;}else if(str.at(i)>='0'&&str.at(i)<='9'){num2++;}else if(str.at(i)==' '){num3++;}}cout << num1 << endl;cout << num2 << endl;cout << num3 << endl;return 0;
}
【2】C++中的bool
- C中不支持bool类型,C++中支持bool类型
- C++中bool类型的默认值是0/false,默认的输出结果是数字的形式,仍然可以使用字母赋值
- true和false就是bool类型的值,是C++中的关键字
- 如果想要使用字母表示bool类型,加boolalpha关键字
- 如果想要恢复数字表示,noboolalpha
- bool类型的大小是1Byte,虽然1bit就能存下bool类型,但是分配空间以字节为单位。
#include <iostream>
using namespace std;int main()
{bool a=true;cout << a << endl; //默认是数字表示cout << boolalpha << a << endl; //加上boolalpha显示字母表示bool b=0;cout << noboolalpha << b << endl; //加上noboolalpha回到数字表示cout << sizeof(b) << endl;return 0;
}
三、作业:字符串逆置
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;int main()
{string str;getline(cin,str); //从终端获取字符串reverse(str.begin(),str.end());cout << str << endl;return 0;
}
相关文章:

0821|C++day1 初步认识C++
一、思维导图 二、知识点回顾 【1】QT软件的使用 1)创建文件 创建文件时,文件的路径一定是全英文 2)修改编码 工具--->选项--->行为--->默认编码:system 【2】C和C的区别 C又叫C plus plus,C是对C的扩充&…...

Linux上实现分片压缩及解压分片zip压缩包 - 及zip、unzip命令详解
👨🎓博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...
概率论作业啊啊啊
1 数据位置 (Measures of location) 对于数据集: 7 , 9 , 9 , 10 , 10 , 11 , 11 , 12 , 12 , 12 , 13 , 14 , 14 , 15 , 16 7,9,9,10,10,11,11,12,12,12,13,14,14,15,16 7,9,9,10,10,11,11,12,12,12,13,14,14,15,16 计算加权平均数,其中权重为: 2 , 1 , 3 , 2 ,…...
React re-render
What is? react的渲染分为两个阶段: render,组件第一次出现在屏幕上的时候触发re-render, 组件第一次渲染之后的渲染 当app的数据更新时(用户手动更新、或异步请求)。 When? re-render发生有四种可能: state改变…...

从零开始配置Jenkins与GitLab集成:一步步实现持续集成
在软件开发中,持续集成是确保高效协作和可靠交付的核心实践。以下是在CentOS上安装配置Jenkins与GitLab集成的详细步骤: 1.安装JDK 解压JDK安装包并设置环境变量: JDK下载网址 Java Downloads | Oracle 台灣 tar zxvf jdk-11.0.5_linux-x64_b…...

高效多用的群集-Haproxy搭建Web集群
Haproxy搭建 Web 群集 一、Haproxy前言 HAProxy是一个使用c语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TcP和HrrP的应用程序代理。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。…...
aws的s3匿名公开访问
点击桶权限 ,添加策略 {"Version": "2012-10-17","Statement": [{"Sid": "AddPerm","Effect": "Allow","Principal": "*","Action": "s3:GetObject&qu…...

2023科隆游戏展:虚幻5游戏百花齐放,云渲染助力虚幻5高速渲染
8月23日,欧洲权威级游戏展示会——科隆游戏展拉开帷幕。今年的参展游戏也相当给力,数十款游戏新预告片在展会上公布,其中有不少游戏使用虚幻5引擎制作,开创了游戏开发新纪元。 虚幻5游戏百花齐放,渲染堪比电影级效果 …...

Spark大数据分析与实战笔记(第一章 Scala语言基础-2)
文章目录 章节概要1.2 Scala的基础语法1.2.1 声明值和变量1.2.2 数据类型1.2.3 算术和操作符重载1.2.4 控制结构语句1.2.5 方法和函数 章节概要 Spark是专为大规模数据处理而设计的快速通用的计算引擎,它是由Scala语言开发实现的,关于大数据技术…...

Linux 下 Mysql 的使用(Ubuntu20.04)
文章目录 一、安装二、使用2.1 登录2.2 数据库操作2.2.1 创建数据库2.2.2 删除数据库2.2.3 创建数据表 参考文档 一、安装 Linux 下 Mysql 的安装非常简单,一个命令即可: sudo apt install mysql-server检查安装是否成功,输入: …...

牛客练习赛114
A.最后有0得数肯定是10得倍数,然后直接排序即可 #include<bits/stdc.h> using namespace std; const int N 1e610,mod1e97; int n; void solve(){cin>>n;vector<int> a(n);for(auto&i:a) cin>>i;sort(a.begin(),a.end(),greater<&g…...
Http与Https
1.简单介绍 HTTP:最广泛应用的网络通信协议,基于TCP,数据传输简单高效,数据是明文。 HTTPS:是HTTP的加强版,是HTTPSSL。在HTTP的基础上加了安全机制,一方面保证数据的安全传输,另一…...

前端通信(渲染、http、缓存、异步、跨域)自用笔记
SSR/CSR:HTML拼接?网页源码?SEO/交互性 SSR (server side render)服务端渲染,是指由服务侧(server side)完成页面的DOM结构拼接,然后发送到浏览器,为其绑定状…...
43.227.198.x怎么检查服务器里是否中毒情况?
要检查43.227.198.1服务器是否中毒,可以执行以下步骤: 运行杀毒软件:运行已安装的杀毒软件进行全盘扫描,查看是否有病毒或恶意软件。如果发现病毒或恶意软件,立即将其删除或隔离。 检查系统文件:检查服务器…...

Sentinel dashboard无法查询到应用的限流配置问题以及解决
一。问题引入 使用sentinle-dashboard控制台 项目整体升级后,发现控制台上无法看到流控规则了 之前的问题是无法注册上来 现在是注册上来了。结果看不到流控规则配置了。 关于注册不上来的问题,可以看另一篇文章 https://blog.csdn.net/a15835774652/…...
【Spring Boot】社交网站中验证用户登录的checkUser方法
public boolean checkUser(User user) {User userInDb userRepository.findByUsername(user.getUsername());if (userInDb ! null && userInDb.getPassword().equals(user.getPassword())) {return true;} else {return false;}} } 这段代码是UserService类中的checkU…...

edge浏览器进行qq截图过保爆决过程
edge浏览器进行qq截图过保解决过程 参考:电脑截屏曝光特别高怎么解决? - 知乎 问题展示 饱和度过高,刺眼 1. 在chrome地址栏输入chrome://flags/ 2. 在页面的搜索栏搜索force color profile 3. 在选项中选择所对应的颜色管理。(…...
【Linux】Linux在防火墙firewall中开放或删除某端口
在生产中往往是不能关闭防火墙firewall的(以下操作是在linux中执行的) #补充一下查看防火墙的命令 #查看防火墙状态 systemctl status firewalld #关闭防火墙 systemctl stop firewalld #重启防火墙 systemctl restart firewalld #启动防火墙 systemctl …...

C++构造函数初始化列表
构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。 C构造函数的初始化列表使得代码更加简洁,请看下面的例子: #include <iostre…...

c语言调用mciSendString播放音乐
如下所示,这是一个使用c语言调用系统方法mciSendString(),让系统播放音乐的示例: baihuaxiang 代码: #include <graphics.h> #include <Windows.h> #include <mmsystem.h>#pragma comment(lib,"WINMM.LIB…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...