还剩42页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《基础语法》C++欢迎来到基础语法的学习之旅!本课程旨在帮助您系统地掌握编程C++C++的基础知识,为后续的深入学习打下坚实的基础通过本课程,您将了解语言的概述、基本结构、变量与常量、数据类型、运算符、表达式与C++语句等核心概念同时,我们还将深入探讨函数、数组、指针、字符串、结构体、枚举类型等重要组成部分,并介绍动态内存分配、异常处理以及文件输入输出等高级特性让我们一起开启编程的奇妙之旅!/C++语言概述C++是一种通用的、面向对象的编程语言,由于世纪年C++Bjarne Stroustrup2080代初在语言的基础上开发出来既保留了语言的效率,又引入了面向对C C++C象编程的概念,如类、对象、继承和多态等广泛应用于系统软件、应用软C++件、游戏开发、嵌入式系统等领域的标准由维C++ISO/IEC JTC1/SC22/WG21护,最新版本为C++20是一种静态类型的语言,需要在编译时进行类型检查支持多种编程范C++C++式,包括面向过程编程、面向对象编程和泛型编程具有强大的表达能力和C++灵活性,可以编写高效、可靠的代码也是许多其他编程语言的基础,如C++、等Java C#高效性面向对象通用性具有很高的执行效支持类、继承、多态等广泛应用于各种软件开C++率,可以直接操作内存面向对象特性发领域编程基本结构C++一个程序通常由以下几个部分组成预处理指令、命名空间声明、函数定义和主函数预处理指令用于包含头文件,头文件中包含了函数和类的声明命C++名空间声明用于避免命名冲突函数定义包含了函数的具体实现主函数是程序的入口点,程序从主函数开始执行程序的基本结构可以用以下代码表示C++#include iostreamusing namespace std;int main{coutHello,World!endl;return0;}其中,是预处理指令,是命名空间声明,是主函数是输出语句,#include iostreamusing namespace std;int maincoutHello,World!endl;是返回值语句return0;预处理指令命名空间声明函数定义包含头文件,如避免命名冲突,如包含函数的具体实现#include iostreamusingnamespacestd;变量与常量变量是程序中用于存储数据的命名存储单元变量的值可以改变常量是程序中值不能改变的量中的变量需要先声明后使用变量声明需要C++指定变量的类型和名称中的常量可以使用关键字或预处理指令定义C++const#define变量的声明和定义方式如下int age;//声明一个整型变量ageage=20;//给变量age赋值为20const doublePI=
3.14159;//定义一个双精度浮点型常量PI#define GRAVITY
9.8//定义一个常量GRAVITY变量名需要遵循一定的命名规则,例如以字母或下划线开头,不能以数字开头,不能包含空格或特殊字符等变量常量程序中用于存储数据的命名存储单元,值可以改变程序中值不能改变的量,使用关键字或预处理指令定义const#define数据类型数据类型是程序中用于指定变量可以存储的数据的种类提供了多种内置数据类型,如整型、浮点型、字符型和布尔型还支持自定义数据类型,如结C++C++构体、枚举类型和类整型数据类型包括、、和,浮点型数据类型包括和,字符型数据类型为,布尔型数据类型为int shortlong long long floatdouble charbool数据类型示例C++int age=20;//整型double salary=
5000.50;//双精度浮点型char grade=A;//字符型bool isPassed=true;//布尔型不同的数据类型占用不同的内存空间,具有不同的取值范围选择合适的数据类型可以提高程序的效率和节省内存空间整型浮点型
12、、和和int shortlonglonglong floatdouble字符型布尔型34char bool运算符运算符是程序中用于执行各种操作的符号提供了多种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符算术运算符用于执行加、减、乘、除等算术运算,C++关系运算符用于比较两个值的大小关系,逻辑运算符用于执行与、或、非等逻辑运算,位运算符用于执行位操作,赋值运算符用于给变量赋值,条件运算符用于根据条件选择不同的值运算符示例C++int a=10,b=5;int sum=a+b;//加法bool isEqual=a==b;//相等bool isGreater=aba20;//与运算运算符具有优先级和结合性,优先级高的运算符先执行,结合性决定了相同优先级的运算符的执行顺序算术运算符
1、、、、+-*/%关系运算符
2、、、、、==!===逻辑运算符
3、、||!表达式与语句表达式是由运算符和操作数组成的式子,用于计算一个值语句是程序中执行的基本单元,用于完成特定的任务中的语句包括声明语句、赋值语句、控C++制语句和函数调用语句表达式可以作为语句的一部分例如,赋值语句就是由赋值运算符和表达式组成的表达式和语句示例C++int a=10;//声明语句int b=a+5;//赋值语句,a+5是表达式if b10{//控制语句coutb isgreater than10endl;//函数调用语句}表达式的值可以是任意数据类型,语句可以控制程序的执行流程表达式语句由运算符和操作数组成,用于计算一个值程序中执行的基本单元,用于完成特定的任务输入输出语句/输入输出语句用于从外部设备(如键盘、文件)读取数据或将数据输出到外部设备(如屏幕、文件)使用库提供的和对象进行输入输出操作对象用于从标准输入设备读取数据,对象用于/C++iostream cin cout/cin cout将数据输出到标准输出设备使用和对象需要包含头文件cin coutiostream输入输出语句示例C++/#include iostreamusingnamespacestd;int main{int age;coutEnter yourage:;cinage;coutYour ageis:ageendl;return0;}可以使用运算符将数据输出到对象,使用运算符从对象读取数据coutcin输入输出1使用对象从标准输入设备读取数据使用对象将数据输出到标准输出设备cin2cout注释注释是程序中用于解释代码的文字,不会被编译器编译执行支持两种注释方式单行注释和多行注释单行注释以开头,多行注释以开头,以结尾注释可以用于解释代码的功能、实现方法C++///**/和注意事项,提高代码的可读性和可维护性注释示例C++//这是一个单行注释/*这是一个多行注释可以跨越多行*/int age=20;//这是一个声明变量的语句良好的注释习惯可以提高代码的质量和可维护性提高可读性1解释代码功能,方便理解方便维护2记录实现方法和注意事项提高质量3良好的注释习惯函数函数是一段完成特定任务的代码块,可以被多次调用函数可以接受参数,并返回一个值中的函数包括库函数和自定义函数库函数是由标准库提供的函数,可C++C++以直接使用自定义函数是由程序员自己定义的函数,可以根据需要实现特定的功能使用函数可以提高代码的重用性和可维护性函数定义的基本结构如下返回类型函数名参数列表{//函数体return返回值;}其中,返回类型指定了函数返回值的类型,函数名是函数的名称,参数列表指定了函数接受的参数,函数体包含了函数的具体实现,返回值是函数返回的值提高重用性1代码块可以被多次调用提高可维护性2函数实现特定功能,方便维护函数定义函数定义是指定函数具体实现的过程函数定义需要指定函数的返回类型、函数名、参数列表和函数体函数体包含了函数的具体实现代码函数定义可以在主函数之前或之后,如果在主函数之后定义,需要在主函数之前声明函数原型函数原型包含了函数的返回类型、函数名和参数列表,用于告诉编译器函数的存在函数定义示例int addint a,int b{//函数定义return a+b;}int main{int sum=add10,5;//函数调用return0;}函数定义需要与函数声明匹配,包括返回类型、函数名和参数列表返回类型函数名参数列表函数体函数调用函数调用是执行函数的过程函数调用需要指定函数名和参数列表函数调用会将参数传递给函数,并执行函数体中的代码函数调用可以出现在程序中的任何位置,只要函数已经定义或声明函数调用可以嵌套,即在一个函数中调用另一个函数函数调用会返回一个值,可以用于赋值或作为表达式的一部分函数调用示例int addint a,int b{return a+b;}int main{int sum=add10,5;//函数调用coutSum:sumendl;return0;}函数调用需要与函数定义或声明匹配,包括函数名和参数列表函数调用流程函数调用会将参数传递给函数,并执行函数体中的代码参数传递参数传递是将数据从调用函数传递给被调用函数的过程支持两种参数传递方式值传递和引用传递值传递是将参数的值复制一份传递给函数,函数中对参数的修改不会影响到调用函数中的原始参数引用传递是将C++参数的地址传递给函数,函数中对参数的修改会影响到调用函数中的原始参数使用引用传递可以提高程序的效率,避免不必要的内存复制参数传递示例void incrementByValueint x{x++;//修改的是x的副本,不影响原始值}void incrementByReferenceintx{x++;//修改的是原始值}int main{inta=10;incrementByValuea;couta value:aendl;//输出10incrementByReferencea;couta reference:aendl;//输出11return0;}可以使用符号声明引用参数值传递引用传递将参数的值复制一份传递给函数将参数的地址传递给函数引用引用是中一种特殊的变量类型,可以看作是变量的别名引用必须在声明时初始化,并且一旦初始化后就不能再改变引用的对象引用可以用于C++简化代码、提高效率和实现某些特殊的功能,例如函数参数传递和函数返回值引用与指针类似,但引用更加安全和易于使用,因为引用不需要进行判空操作,并且引用的对象不能为空引用示例inta=10;int b=a;//b是a的引用b=20;//修改b的值,a的值也会改变couta:aendl;//输出20coutb:bendl;//输出20引用可以用于函数参数传递,实现对原始数据的修改简化代码提高效率引用可以作为变量的别名,简化代码引用不需要进行判空操作,更加安全和高效默认参数默认参数是指在函数定义时给参数指定一个默认值,如果在函数调用时没有传递该参数,则使用默认值默认参数可以简化函数调用,提高代码的灵活性默认参数只能从右向左指定,即如果一个参数指定了默认值,则它右边的所有参数都必须指定默认值默认参数可以在函数声明或定义中指定,但不能同时指定默认参数示例int addint a,int b=5{//b有默认值5return a+b;}int main{int sum1=add10;//使用默认值5,sum1=15int sum2=add10,20;//使用传递的值20,sum2=30coutsum1:sum1endl;coutsum2:sum2endl;return0;}默认参数可以提高函数的通用性和易用性简化调用1函数调用时可以省略部分参数提高灵活性2可以根据需要选择是否使用默认值内联函数内联函数是指在编译时将函数体直接插入到函数调用处,而不是进行函数调用内联函数可以减少函数调用的开销,提高程序的执行效率内联函数适用于函数体较小、调用频繁的函数可以使用关键字声明内联函数内联函数的定义必须在函数调用之前,否则编译器可能无法进行内联展开inline内联函数示例inline intaddinta,int b{//声明内联函数return a+b;}int main{int sum=add10,5;//内联展开coutSum:sumendl;return0;}内联函数可以提高程序的执行效率,但会增加代码的体积减少开销提高效率减少函数调用的开销提高程序的执行效率递归函数递归函数是指在函数体中调用自身的函数递归函数可以用于解决一些具有递归性质的问题,例如计算阶乘、斐波那契数列等递归函数需要指定递归的终止条件,否则会无限递归,导致程序崩溃递归函数的效率通常较低,因为每次递归都需要进行函数调用和参数传递递归函数示例int factorialintn{if n==0{//终止条件return1;}else{return n*factorialn-1;//递归调用}}int main{int result=factorial5;//计算5的阶乘coutFactorial:resultendl;return0;}递归函数需要谨慎使用,避免无限递归递归调用终止条件1函数体中调用自身指定递归的终止条件,避免无限递归2数组数组是一组具有相同数据类型的元素的集合数组中的每个元素都有一个唯一的索引,用于访问该元素中的数组可以是静态数组或动态数组静态数组的大小在编译时确定,动态数组的大小在运C++行时确定数组可以用于存储和处理大量相同类型的数据数组的元素可以是任意数据类型,包括整型、浮点型、字符型和指针等数组示例int numbers
[5];//声明一个包含5个整数的静态数组int*dynamicArray=new int
[10];//声明一个包含10个整数的动态数组numbers
[0]=1;//给数组的第一个元素赋值dynamicArray
[0]=10;//给动态数组的第一个元素赋值delete[]dynamicArray;//释放动态数组的内存数组的索引从开始,到数组的大小减结束01存储数据1存储大量相同类型的数据访问元素2通过索引访问数组中的元素处理数据3方便进行数据处理一维数组一维数组是最简单的数组类型,它只包含一行元素一维数组的声明需要指定数组的大小和元素的类型可以使用循环语句遍历一维数组中的所有元素一维数组可以用于存储和处理线性数据,例如学生成绩、温度记录等一维数组的元素在内存中是连续存储的一维数组示例int scores
[5]={80,90,75,85,95};//声明并初始化一个包含5个整数的一维数组for inti=0;i5;i++{coutScorei:scores[i]endl;//遍历数组}可以使用数组名和索引访问一维数组中的元素声明数组1指定数组大小和元素类型遍历数组2使用循环语句遍历数组中的元素二维数组二维数组是一种包含多行和多列元素的数组二维数组可以看作是由多个一维数组组成的数组二维数组的声明需要指定数组的行数和列数,以及元素的类型可以使用嵌套循环语句遍历二维数组中的所有元素二维数组可以用于存储和处理表格数据,例如矩阵、图像等二维数组的元素在内存中是连续存储的,按照行优先或列优先的方式存储二维数组示例int matrix
[3]
[3]={{1,2,3},{4,5,6},{7,8,9}};//声明并初始化一个3x3的二维数组for inti=0;i3;i++{for intj=0;j3;j++{coutMatrix[i][j]:matrix[i][j]endl;//遍历数组}}可以使用数组名和行索引、列索引访问二维数组中的元素指针指针是一种特殊的变量类型,用于存储变量的地址指针可以用于间接访问变量的值中的指针可以是空指针,即不指向任何变量的指针指针可以用于动态内存分配、函数参数传递和数据结构实现等指针的操作需C++要谨慎,避免出现空指针引用和野指针等问题指针示例int age=20;int*agePtr=age;//声明一个指向age的指针coutAge:ageendl;//直接访问coutAge viapointer:*agePtrendl;//间接访问*agePtr=30;//通过指针修改age的值coutNew Age:ageendl;//输出30可以使用运算符获取变量的地址,使用运算符访问指针指向的变量的值*指针与内存地址指针存储变量的内存地址指针的定义和初始化指针的定义需要指定指针指向的变量类型可以使用运算符声明指针变量指针的初始化需要将指针指向一个有效的内存地址,例如变量的地址或*动态分配的内存地址可以使用关键字将指针初始化为空指针未初始化的指针称为野指针,访问野指针会导致程序崩溃指针的类型必须nullptr与指向的变量类型匹配,否则会导致类型错误指针定义和初始化示例int age=20;int*agePtr=age;//定义并初始化一个指向age的指针double*salaryPtr=nullptr;//定义一个空指针int*invalidPtr;//野指针,未初始化指针的初始化是避免野指针的关键步骤指定类型有效地址避免野指针指针需要指定指向的变量类型指针需要指向一个有效的内存地址未初始化的指针是野指针,访问会导致程序崩溃指针运算指针可以进行一些算术运算,例如加法和减法指针的加法运算会将指针指向的内存地址增加指定的偏移量指针的减法运算会计算两个指针指向的内存地址之间的差值指针运算需要谨慎使用,避免超出内存边界指针运算通常用于数组的遍历和动态内存分配指针运算示例int numbers
[5]={1,2,3,4,5};int*ptr=numbers;//指向数组的第一个元素cout*ptr:*ptrendl;//输出1ptr++;//指向数组的下一个元素cout*ptr:*ptrendl;//输出2指针运算需要根据指针指向的变量类型进行调整,例如类型的指针加会增加个字节int14加法运算减法运算指针指向的内存地址增加指定的偏移量计算两个指针指向的内存地址之间的差值指针与数组数组名可以看作是指向数组第一个元素的指针可以使用指针访问数组中的元素指针运算可以用于遍历数组数组和指针之间存在密切的关系,但它们也有一些区别数组的大小在编译时确定,而指针可以指向任意大小的内存区域数组名不能被赋值,而指针可以被赋值使用指针访问数组元素可以提高程序的效率,但需要注意指针的有效性指针与数组示例int numbers
[5]={1,2,3,4,5};int*ptr=numbers;//数组名numbers是指向数组第一个元素的指针for inti=0;i5;i++{coutnumbers[i]:*ptr+iendl;//使用指针访问数组元素}指针和数组可以相互转换,灵活使用数组名是指针1数组名可以看作是指向数组第一个元素的指针指针访问数组2可以使用指针访问数组中的元素字符串字符串是由字符组成的序列中的字符串可以使用字符数组或类表示字符数组是以空字符结尾的字符序列类是标准库提供的字符串C++string\0string C++类,提供了丰富的字符串操作方法字符串可以用于存储和处理文本数据字符串的操作需要注意字符串的长度和边界,避免出现越界访问字符串示例char message
[20]=Hello,World!;//使用字符数组表示字符串string greeting=Hello,C++!;//使用string类表示字符串coutMessage:messageendl;coutGreeting:greetingendl;可以使用字符串字面量初始化字符数组和对象string字符数组类string以空字符结尾的字符序列标准库提供的字符串类\0C++字符串定义和输入输出/字符串可以使用字符数组或类定义字符数组的定义需要指定数组的大小,类的定义不需要指定大小,可以动态调整可以使用对象从标准输入设备读取字符串,使用对象将字符串输出到标准输出设备string stringcincout可以使用函数读取包含空格的字符串字符串的输入输出需要注意字符串的长度,避免缓冲区溢出getline/字符串定义和输入输出示例/char name
[20];coutEnter yourname:;cinname;//读取不包含空格的字符串coutYour nameis:nameendl;string address;coutEnter youraddress:;getlinecin,address;//读取包含空格的字符串coutYour addressis:addressendl;可以使用函数清除输入缓冲区中的残留字符cin.ignore字符数组类1string定义需要指定数组大小定义不需要指定大小,可以动态调整2字符串操作类提供了丰富的字符串操作方法,例如获取字符串长度、连接字符串、比较字符串、查找子字符串、替换子字符串等可以使用函数获取字符串的长度,使用运算符连接字符串,使用运算符比较字符串,使用函数查找子字符串,使用函数替string length+==find replace换子字符串字符串操作需要注意字符串的边界,避免出现越界访问字符串操作示例string str1=Hello;string str2=World;coutLength ofstr1:str
1.lengthendl;//获取字符串长度string str3=str1+,+str2+!;//连接字符串coutstr3:str3endl;if str1==Hello{//比较字符串coutstr1is Helloendl;}size_t pos=str
3.findWorld;//查找子字符串if pos!=string::npos{coutWorld foundat position:posendl;}str
3.replacepos,5,C++;//替换子字符串coutNew str3:str3endl;类的字符串操作方法可以简化字符串处理的代码string获取长度1函数length连接字符串2运算符+比较字符串3运算符==查找子字符串4函数find替换子字符串结构体结构体是一种用户自定义的数据类型,可以包含多个不同类型的成员变量结构体可以用于表示复杂的数据结构,例如学生信息、员工信息等结构体的成员变量可以使用运算符访问结构体可以嵌套,即一个结构体可以包含另一个结构体作为成员变量结构体可以用于实.现面向对象编程的一些特性,例如封装结构体示例struct Student{string name;int age;double gpa;};int main{Student student1;student
1.name=Tom;student
1.age=20;student
1.gpa=
3.5;coutName:student
1.nameendl;coutAge:student
1.ageendl;coutGPA:student
1.gpaendl;return0;}可以使用关键字给结构体起别名typedef自定义类型1用户自定义的数据类型包含多个成员2可以包含多个不同类型的成员变量表示复杂数据3用于表示复杂的数据结构结构体定义结构体定义需要指定结构体的名称和成员变量成员变量可以有不同的数据类型结构体定义可以在主函数之前或之后,如果在主函数之后定义,需要在主函数之前声明结构体结构体定义可以使用关键字结构体定义可以包含成员函数,实现面向对象编程的一些特struct性结构体定义示例struct Point{//结构体定义intx;int y;};int main{Point p1;p
1.x=10;p
1.y=20;coutx:p
1.xendl;couty:p
1.yendl;return0;}结构体定义需要注意成员变量的类型和名称结构体成员访问结构体成员可以使用运算符访问如果结构体变量是指针类型,可以使用运算符访问成员结构体成员可以是任意数据类型,包括整型、浮点型、字符型、指针和结构体等结构体成员的访问需要注意成员的名称和类型,避免出现类型错误结构体成员的访问可以嵌套,.-即可以访问结构体成员的成员结构体成员访问示例struct Rectangle{Point topLeft;Point bottomRight;};int main{Rectangle rect;rect.topLeft.x=0;//访问嵌套的成员rect.topLeft.y=0;rect.bottomRight.x=10;rect.bottomRight.y=20;coutTop Leftx:rect.topLeft.xendl;coutBottom Righty:rect.bottomRight.yendl;return0;}结构体成员的访问可以使用运算符或运算符.-结构体成员访问使用运算符或运算符访问结构体成员.-结构体数组结构体数组是一种包含多个结构体元素的数组结构体数组可以用于存储和处理大量相同类型的结构体数据结构体数组的声明需要指定数组的大小和结构体的类型可以使用循环语句遍历结构体数组中的所有元素结构体数组的元素在内存中是连续存储的结构体数组可以用于表示复杂的数据结构集合,例如学生列表、员工列表等结构体数组示例Student students
[3];//声明一个包含3个Student结构体的数组students
[0].name=Tom;students
[0].age=20;students
[1].name=Jerry;students
[1].age=21;for inti=0;i3;i++{coutName:students[i].name,Age:students[i].ageendl;//遍历数组}可以使用数组名和索引访问结构体数组中的元素存储数据访问元素存储大量相同类型的结构体数据使用数组名和索引访问结构体数组中的元素枚举类型枚举类型是一种用户自定义的数据类型,用于定义一组命名的整数常量枚举类型可以提高代码的可读性和可维护性枚举类型的定义可以使用关键字枚举类型中的每个常量都enum有一个默认的整数值,从开始递增可以显式地给枚举常量指定整数值枚举类型可以用于表示一组相关的常量,例如颜色、状态等0枚举类型示例enum Color{//定义一个枚举类型ColorRED,//默认值为0GREEN,//默认值为1BLUE//默认值为2};int main{Color myColor=GREEN;coutColor value:myColorendl;//输出1return0;}可以使用枚举类型的名称和常量访问枚举常量提高可读性提高可维护性使用有意义的名称代替整数值修改常量值只需要修改枚举类型的定义动态内存分配动态内存分配是指在程序运行时根据需要分配内存空间提供了和操作符用于动态内存分配和释放操作符用于分配指定大小的内存空间,并返回指向该内存空间的C++new delete new指针操作符用于释放动态分配的内存空间,避免内存泄漏动态内存分配可以用于创建动态数组、链表等数据结构动态内存分配需要谨慎使用,避免出现内存泄漏和野指针等delete问题动态内存分配示例int*numbers=new int
[10];//动态分配一个包含10个整数的数组for inti=0;i10;i++{numbers[i]=i*2;}delete[]numbers;//释放动态分配的内存numbers=nullptr;//避免野指针必须使用操作符释放操作符分配的内存deletenew操作符new1分配指定大小的内存空间,并返回指向该内存空间的指针操作符delete2释放动态分配的内存空间,避免内存泄漏和操作符new delete操作符用于动态分配内存空间,可以分配单个对象或数组操作符可以指定分配的内存大小和对象的类型如果分配失败,操作符会抛出异常操作new newnew std::bad_alloc delete符用于释放动态分配的内存空间,必须与操作符配对使用操作符可以释放单个对象或数组如果释放的内存不是操作符分配的,会导致程序崩溃操作符释放内new deletenew delete存后,应该将指针设置为空指针,避免野指针和操作符示例new deleteint*singleNumber=new int;//分配单个整数*singleNumber=10;delete singleNumber;singleNumber=nullptr;int*numbers=new int
[10];//分配一个包含10个整数的数组delete[]numbers;numbers=nullptr;使用和操作符需要谨慎,避免内存泄漏和野指针new delete分配内存释放内存操作符用于分配内存空间操作符用于释放内存空间new delete异常处理异常处理是一种用于处理程序运行时错误的机制提供了块用于捕获和处理异常块包含可能抛出异常的代码,块包含处理异常的代码如果块中的代码抛出异常,程序会跳转到匹配的块执C++try-catch trycatch trycatch行可以使用语句抛出异常异常处理可以提高程序的健壮性和可靠性,避免程序因错误而崩溃异常处理需要谨慎使用,避免过度使用导致代码难以理解throw异常处理示例try{//可能抛出异常的代码int result=divide10,0;//除数为0,抛出异常coutResult:resultendl;//不会执行}catch const char*error{//处理异常的代码coutError:errorendl;//输出Error:Divide zero}可以使用多个块处理不同类型的异常catch块catch2包含处理异常的代码块try1包含可能抛出异常的代码语句throw抛出异常3块try-catch块用于捕获和处理异常块包含可能抛出异常的代码,块包含处理异常的代码如果块中的代码抛出异常,程序会跳转到匹配的块执行块可以捕获指定类型的异常,也可以使用捕获所有类型的异常try-catch trycatch trycatch catch...try-块可以嵌套,即一个块可以包含另一个块块需要谨慎使用,避免过度使用导致代码难以理解catch trytry-catch try-catch块示例try-catchtry{//可能抛出异常的代码int result=divide10,0;//除数为0,抛出异常coutResult:resultendl;//不会执行}catch interrorCode{//处理int类型的异常coutError Code:errorCodeendl;}catch...{//处理所有类型的异常coutUnknown erroroccurredendl;}块的顺序需要注意,应该先捕获具体类型的异常,再捕获通用类型的异常catch捕获异常1块用于捕获指定类型的异常catch处理异常2块包含处理异常的代码catch提高健壮性3避免程序因错误而崩溃异常类型中的异常类型可以是任意数据类型,包括基本数据类型、类和结构体标准库提供了一些标准的异常类型,例如、、等可以使用这些标准的异常类型,也可以自C++C++std::exception std::bad_alloc std::runtime_error定义异常类型自定义异常类型需要继承类,并重写函数,返回异常的描述信息异常类型可以用于区分不同类型的错误,方便进行处理std::exception what异常类型示例#include exceptionclassDivideByZeroException:public std::exception{public:const char*what constnoexcept{return Dividezero;}};int divideinta,int b{if b==0{throw DivideByZeroException;//抛出自定义异常}return a/b;}自定义异常类型可以提供更详细的错误信息标准异常
1、等std::exception std::bad_alloc自定义异常2继承类,并重写函数std::exception what自定义异常自定义异常是指用户根据需要定义的异常类型自定义异常可以用于表示特定的错误情况,并提供更详细的错误信息自定义异常需要继承类,并重写函数,返回异常的描述信息自定义异常可以包含成员变量,用于存储与异常相关的附加信息自定std::exception what义异常可以提高代码的可读性和可维护性自定义异常示例#include exceptionclassFileOpenException:public std::exception{private:string filename;public:FileOpenExceptionconst string filename:filenamefilename{}constchar*what constnoexcept{return Failedto openfile:+filename.c_str;}};void openFileconststringfilename{//...if/*open failed*/{throw FileOpenExceptionfilename;//抛出自定义异常}}自定义异常可以提供与异常相关的附加信息,例如文件名文件输入输出/文件输入输出是指从文件中读取数据或将数据写入文件使用库提供的和类进行文件输入输出操作类用于从文件中读取数据,类用于将数据写入文件使用和类需要包含头文件文件输入输出/C++fstream ifstream ofstream/ifstream ofstreamifstream ofstreamfstream/可以用于存储和读取持久化数据,例如配置文件、日志文件等文件输入输出需要注意文件的打开模式和文件指针的位置,避免出现错误/文件输入输出示例/#include fstreamofstream outputFileoutput.txt;//创建一个ofstream对象,并打开文件if outputFile.is_open{outputFileHello,File!endl;//将数据写入文件outputFile.close;//关闭文件}ifstream inputFileoutput.txt;//创建一个ifstream对象,并打开文件if inputFile.is_open{string line;while getlineinputFile,line{//从文件中读取数据coutlineendl;//输出读取的数据}inputFile.close;//关闭文件}可以使用文件流对象进行文件输入输出操作/文件输入/输出从文件中读取数据或将数据写入文件文件打开和关闭文件打开是指创建一个文件流对象,并将该对象与一个文件关联起来文件打开可以使用或类的构造函数,也可以使用函数文件打开需要指定文件的路径和打ifstreamofstreamopen开模式打开模式包括输入模式、输出模式、追加模式等文件关闭是指断开文件流对象与文件的关联,释放文件资源文件关闭可以使用函数文件打开和关闭需要配对使用,close避免文件资源泄漏文件打开和关闭示例ofstreamoutputFile;//创建一个ofstream对象outputFile.openoutput.txt,ios::out;//打开文件,指定输出模式if outputFile.is_open{//...outputFile.close;//关闭文件}ifstream inputFileinput.txt;//创建一个ifstream对象,并打开文件if inputFile.is_open{//...inputFile.close;//关闭文件}可以使用函数检查文件是否成功打开is_open打开文件关闭文件创建一个文件流对象,并将该对象与一个文件关联起来断开文件流对象与文件的关联,释放文件资源文件读写操作文件读写操作是指从文件中读取数据或将数据写入文件可以使用文件流对象的运算符从文件中读取数据,使用运算符将数据写入文件可以使用函数从文件中读取一行数据可以使用getline函数从文件中读取指定大小的数据块,使用函数将指定大小的数据块写入文件文件读写操作需要注意文件指针的位置和文件的打开模式,避免出现错误read write文件读写操作示例ofstream outputFileoutput.txt;outputFileHello,File!endl;//将字符串写入文件int number=123;outputFilenumberendl;//将整数写入文件outputFile.close;ifstream inputFileoutput.txt;string line;getlineinputFile,line;//从文件中读取一行数据coutLine:lineendl;int readNumber;inputFilereadNumber;//从文件中读取整数coutNumber:readNumberendl;inputFile.close;可以使用文件流对象进行各种类型的数据读写操作写入文件读取文件使用运算符将数据写入文件使用运算符从文件中读取数据,使用函数读取一行数据getline文件定位文件定位是指改变文件指针的位置,以便从文件的指定位置读取数据或将数据写入文件的指定位置可以使用函数设置输入文件指针的位置,使用函数设置输出文件指针的位置可以使用函数获取输入文件指针的当前位置,seekg seekptellg使用函数获取输出文件指针的当前位置文件定位可以用于实现随机访问文件,例如读取文件的指定行或修改文件的指定内容文件定位需要注意文件指针的有效范围,避免超出文件边界tellp文件定位示例ifstream inputFiledata.txt;inputFile.seekg10;//将输入文件指针移动到第10个字节char c;inputFile.getc;//从文件中读取一个字符coutCharacter atposition10:cendl;long position=inputFile.tellg;//获取输入文件指针的当前位置coutCurrent position:positionendl;inputFile.close;可以使用文件指针的位置实现随机访问文件seekg函数1设置输入文件指针的位置seekp函数2设置输出文件指针的位置tellg函数3获取输入文件指针的当前位置tellp函数4获取输出文件指针的当前位置总结回顾本课程系统地介绍了基础语法,包括语言概述、基本结构、变量与常量、数据类型、C++C++运算符、表达式与语句、输入输出语句、注释、函数、数组、指针、字符串、结构体、枚举/类型、动态内存分配、异常处理和文件输入输出通过本课程的学习,您应该已经掌握了/编程的基础知识,为后续的深入学习打下了坚实的基础希望您能够继续努力,不断提C++高自己的编程能力是一门强大的编程语言,掌握它可以为您打开通往软件开发的大C++C++门回顾学习的关键点,加强理解和记忆,为接下来的学习和实践做好准备C++语言概述了解的起源和特点C++基本语法掌握变量、数据类型、运算符等高级特性熟悉异常处理、文件等I/O思考和练习为了巩固所学知识,建议您完成以下思考和练习编写一个程序,实现计算器功能,可以进行加、减、乘、除运算编写一个程序,
1.C++
2.C++实现学生信息管理系统,可以添加、删除、修改和查询学生信息编写一个程序,实现文件加密和解密功能,可以对文件进行简单的加密和
3.C++解密操作查阅标准库文档,了解更多库函数的使用方法阅读相关的书籍和博客,深入学习编程技术通过思考和练习,您
4.C++C++
5.C++C++可以更好地掌握编程技能,并将其应用到实际项目中祝您在编程的道路上越走越远!C++C++不断实践,巩固知识,挑战自我,提升编程技能查阅文档2了解库函数的使用方法C++编写程序1实现计算器、学生管理系统等阅读书籍深入学习编程技术3C++。
个人认证
优秀文档
获得点赞 0