还剩47页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
语言复习教程课件精讲C++欢迎来到语言复习教程!本教程旨在帮助您系统回顾语言的核心概念和C++C++技术,并通过精讲课件,让您在短时间内掌握的要点我们将从的历史C++C++发展讲起,逐步深入到面向对象编程、模板、等高级主题希望通过本次教STL程,您能对有更深入的理解,并能灵活运用到实际开发中C++语言发展历程C++起源与发展C++起源于C语言,由Bjarne Stroustrup于20世纪80年代初在贝尔实验室开发最初被称为“带类的C”,后来演变为C++C++在C语言的基础上增加了面向对象编程的特性,使其更加灵活和强大标准化历程C++的标准化经历了多个阶段,其中最重要的包括C++
98、C++
03、C++
11、C++
14、C++17和C++20等标准每个标准的发布都为C++带来了新的特性和改进,使其不断适应现代编程的需求应用领域C++广泛应用于各个领域,包括操作系统、游戏开发、嵌入式系统、高性能计算等许多大型软件项目,如Windows、Linux、Unreal Engine等,都是用C++编写的C++的性能和灵活性使其成为开发复杂系统的首选语言语言特点概述C++面向对象C++是一种面向对象的编程语言,支持封装、继承和多态等特性这使得C++能够更好地组织和管理代码,提高代码的可重用性和可维护性高性能C++具有很高的性能,可以直接操作内存和硬件资源这使得C++在需要高性能的领域,如游戏开发和嵌入式系统,具有很大的优势泛型编程C++支持泛型编程,可以使用模板来实现通用的数据结构和算法这使得C++能够编写更加灵活和可扩展的代码兼容性C++与C语言兼容,可以直接调用C语言编写的代码这使得C++能够利用C语言的丰富资源,快速开发复杂的系统语言基本结构C++头文件命名空间主函数程序通常包含多个头文件,用于声明使用命名空间来避免命名冲突常用程序从主函数开始执行主函C++C++C++main函数、类和变量常用的头文件包括的命名空间包括(标准命名空间)和自数是程序的入口点,用于控制程序的执行std(用于输入输出)、(用于定义命名空间使用流程主函数通常返回一个整数值,用于iostream stringusing namespace字符串操作)和(用于动态数组)可以方便地使用命名空间中的成员表示程序的退出状态vector std;std基本数据类型C++整型1C++提供了多种整型数据类型,包括int、short、long和long long不同的整型数据类型具有不同的取值范围,可以根据实际需求选择合适的类型浮点型2C++提供了两种浮点型数据类型,包括float和doublefloat是单精度浮点型,double是双精度浮点型double具有更高的精度,通常用于需要高精字符型3度计算的场合C++使用char类型来表示字符char类型占用一个字节的存储空间,可以表示ASCII字符集中的字符可以使用字符常量或字符变量来表示字符布尔型4C++使用bool类型来表示布尔值bool类型只有两个取值,true和falsebool类型通常用于条件判断和逻辑运算变量及其定义C++变量定义变量初始化变量作用域123中使用变量来存储数据变量必中可以在定义变量时对其进行初中变量的作用域决定了变量的可C++C++C++须先定义后使用变量定义包括变量始化例如,定义了一见范围变量的作用域可以是全局的int age=20;类型和变量名例如,定义个整型变量并将其初始化为或局部的全局变量在整个程序中都int age;age20了一个整型变量未初始化的变量具有不确定的值可见,局部变量只在定义它的代码块age中可见常量及其定义C++常量定义常量常量const#define中使用常量来表示常量使用关常量使用C++const const#define#define不可修改的值常量必键字来定义例如,预处理指令来定义例须在定义时进行初始化定义如,定const int age=20;#define AGE20常量可以使用关键了一个整型常量,义了一个名为的常const ageAGE字或预处理指令其值为常量的量,其值为#define20const20#define来定义值在程序执行过程中不常量在预处理阶段被替能被修改换为对应的值运算符及其分类C++算术运算符1用于执行算术运算,包括加(+)、减(-)、乘(*)、除(/)和取模(%)关系运算符2用于比较两个值之间的关系,包括等于(==)、不等于(!=)、大于()、小于()、大于等于(=)和小于等于(=)逻辑运算符3用于执行逻辑运算,包括与()、或(||)和非(!)赋值运算符4用于将一个值赋给一个变量,包括等于(=)、加等于(+=)、减等于(-=)、乘等于(*=)、除等于(/=)和取模等于(%=)位运算符5用于对二进制位进行操作,包括与()、或(|)、异或(^)、取反(~)、左移()和右移()表达式及其计算C++表达式组成运算符优先级类型转换表达式由运算符、操作数和括号组成运算符具有不同的优先级优先级高中存在隐式类型转换和显式类型转换C++C++C++操作数可以是常量、变量或函数调用括的运算符先于优先级低的运算符执行可隐式类型转换由编译器自动完成,显式类号用于改变运算符的优先级以使用括号来改变运算符的优先级型转换需要使用类型转换运算符分支语句C++if-else语句if中使用语句来执行条件判断如果条件为真,则执行语句C++if if中的代码块如果条件为假,则跳过语句中的代码块if语句else中使用语句来处理条件为假的情况如果语句中的条C++else if件为假,则执行语句中的代码块else语句else if中使用语句来处理多个条件判断如果语句中的条件C++else ifif为假,则依次判断语句中的条件如果某个条件为真,则else if执行对应的代码块分支语句C++switch语句case中使用语句来指定不同的分支C++case2每个case语句对应一个常量值如果表达式的值与某个语句中的常量值相case语句switch等,则执行对应的代码块1中使用语句来执行多路分支C++switch语句根据表达式的值选择执行对switch语句default应的语句中的代码块case中使用语句来处理所有语C++default case句都不匹配的情况如果表达式的值与所3有语句中的常量值都不相等,则执case行语句中的代码块default循环语句C++for循环循环变量for12中使用循环来重复执行循环通常使用循环变量来控C++for for一段代码循环由初始化语制循环的次数循环变量在初for句、条件语句和更新语句组成始化语句中定义,在更新语句初始化语句在循环开始前执行中更新循环变量的作用域通一次,条件语句在每次循环开常只在循环中for始前判断,更新语句在每次循环结束后执行嵌套循环3中可以在循环中嵌套循环嵌套循环可以用于处理二维数组和C++for for其他多维数据结构循环语句C++while循环循环条件while中使用循环来重复执行循环的循环条件是一个布尔C++while while一段代码循环只有一个条表达式如果表达式的值为真,while件语句只要条件为真,循则执行循环体中的代码如果表while环就会一直执行达式的值为假,则跳过循环体中的代码死循环如果循环的循环条件一直为真,则会形成死循环死循环会导致程序while无法正常结束,需要避免循环语句C++do-while循环do-while1C++中使用do-while循环来重复执行一段代码do-while循环与while循环类似,不同之处在于do-while循环至少执行一次循环体中的代码循环体2do-while循环的循环体中的代码至少执行一次循环体中的代码执行完毕后,再判断循环条件如果循环条件为真,则继续执行循环体中的代码如果循环条件为假,则跳出循环适用场景3do-while循环适用于需要至少执行一次循环体中的代码的场景例如,从用户输入中读取数据,直到用户输入特定的结束符跳转语句和C++breakcontinue语句语句适用场景break continue中使用语句来中使用语语句适用于需要立C++break C++continue break跳出循环当语句句来跳过当前循环的剩即结束循环的场景break被执行时,程序会立即余部分,继续执行下一语句适用于需continue跳出当前循环,执行循次循环当语要跳过当前循环的剩余continue环后面的代码句被执行时,程序会跳部分,继续执行下一次过当前循环中循环的场景continue语句后面的代码,直接开始下一次循环的判断数组概述及一维数组C++数组概述C++中使用数组来存储相同类型的数据数组是一组连续的存储单元,可以通过下标来访问数组中的元素1一维数组定义2C++中使用类型名数组名[数组长度]的方式来定义一维数组例如,int arr
[10];定义了一个包含10个整型元素的数组arr数组初始化3C++中可以在定义数组时对其进行初始化例如,int arr
[10]={1,2,3,4,5,6,7,8,9,10};定义了一个包含10个整型元素的数组arr,并将其初始化为1到10数组访问4C++中使用下标来访问数组中的元素数组的下标从0开始例如,arr
[0]表示数组arr中的第一个元素二维数组及其应用C++二维数组定义二维数组初始化二维数组访问中使用类型名数组名行数列数的方中可以在定义二维数组时对其进行初中使用行下标和列下标来访问二维数C++[][]C++C++式来定义二维数组例如,定始化例如,组中的元素数组的下标从开始例如,int arr
[3]
[4];int arr
[3]
[4]={{1,2,3,4},{5,0义了一个包含行列的整型数组定义了一个包含表示数组中的第一个元素34arr6,7,8},{9,10,11,12}};3arr
[0]
[0]arr行列的整型数组,并将其初始化为指4arr定的值函数定义及调用C++函数定义中使用类型名函数名参数列表函数体的方式来定义函数C++{}类型名表示函数的返回值类型,函数名表示函数的名称,参数列表表示函数的参数函数调用中使用函数名参数列表的方式来调用函数参数列表中的C++参数与函数定义中的参数一一对应函数原型中可以先声明函数原型,再定义函数函数原型包括函数的C++返回值类型、函数名和参数列表函数原型可以告诉编译器函数的参数类型和返回值类型,方便编译器进行类型检查函数参数传递机制C++指针传递指针传递是指将实参的地址传递给形参在函数内部对形参的修改会影响实参的值2指针传递可以有效地减少内存空间的占用,值传递但需要注意指针的有效性值传递是指将实参的值复制给形参在1函数内部对形参的修改不会影响实参的引用传递值值传递是一种安全的参数传递方式,但会占用额外的内存空间引用传递是指将实参的引用传递给形参在函数内部对形参的修改会影响实参的值3引用传递可以有效地减少内存空间的占用,并且比指针传递更加安全函数的返回值C++返回值类型语句return12函数可以有返回值,也可中使用语句来返回函C++C++return以没有返回值如果函数有返数的值语句后面可以return回值,则需要在函数定义中指跟一个表达式,表示函数的返定返回值类型如果函数没有回值如果函数没有返回值,返回值,则返回值类型为则可以使用语句来结束void return;函数的执行返回值传递3函数的返回值可以通过值传递、指针传递或引用传递的方式返回给C++调用者不同的返回值传递方式具有不同的特点,需要根据实际情况选择合适的传递方式函数重载机制C++函数重载参数列表允许在同一个作用域内定义函数重载要求函数具有不同的参C++多个同名函数,只要这些函数的数列表参数列表的不同包括参参数列表不同即可这种机制称数的类型、参数的个数和参数的为函数重载顺序编译器根据参数列表来区分不同的重载函数适用场景函数重载适用于需要对不同类型的数据执行相同操作的场景例如,可以定义多个同名的函数,用于打印不同类型的数据print内联函数及其优缺点C++内联函数1C++中使用inline关键字来声明内联函数内联函数是指在调用函数时,将函数体直接插入到调用位置,而不是进行函数调用优点2内联函数可以减少函数调用的开销,提高程序的执行效率内联函数可以更好地进行编译器优化,生成更高效的代码缺点3内联函数会增加代码的体积,降低程序的缓存命中率内联函数不适用于包含复杂逻辑的函数,否则会导致代码膨胀适用场景4内联函数适用于函数体较小、调用频繁的函数例如,可以定义简单的getter和setter函数为内联函数递归函数及其特点C++递归函数递归特点适用场景中允许函数调用自身这种函数称为递递归函数具有简洁的特点,可以用于解决一递归函数适用于可以分解为相同子问题的场C++归函数递归函数必须包含递归出口,否则些复杂的问题递归函数需要占用较多的栈景例如,可以使用递归函数来计算阶乘、会导致无限递归,最终导致程序崩溃空间,容易导致栈溢出斐波那契数列等指针概述及其使用C++指针概述1C++中使用指针来存储变量的地址指针是一种特殊的数据类型,可以指向任何类型的数据指针定义2C++中使用类型名*指针名的方式来定义指针例如,int*p;定义了一个指向整型变量的指针p指针赋值3C++中使用运算符来获取变量的地址例如,int a=10;int*p=a;将变量a的地址赋给指针p指针访问4C++中使用*运算符来访问指针指向的变量的值例如,inta=10;int*p=a;int b=*p;将指针p指向的变量的值赋给变量b指针与一维数组C++数组名指针运算数组访问中数组名表示数组的首地址可以将中可以对指针进行加减运算指针加中使用指针来访问数组中的元素更加C++C++C++数组名赋给指针,通过指针来访问数组中表示指向数组中的下一个元素,指针减灵活可以使用指针来遍历数组,也可以11的元素表示指向数组中的上一个元素使用指针来进行数组的拷贝和排序指针与二维数组C++二维数组地址行指针数组访问中二维数组的地址表示数组的首地址中使用行指针来指向二维数组的每一中使用指针来访问二维数组中的元素C++C++C++二维数组可以看作是由多个一维数组组成行行指针的类型为类型名指针名列更加灵活可以使用指针来遍历二维数组,*[的数组数例如,定义了一个指向包也可以使用指针来进行二维数组的拷贝和]int*p
[4];含个整型元素的数组的指针排序4p引用及其应用C++引用特性引用必须在定义时进行初始化,不能定义2空引用引用一旦初始化后,就不能再引用其他变量引用可以有效地减少内存空引用定义间的占用,并且比指针更加安全1中使用类型名引用名变量名的C++=方式来定义引用引用是变量的别名,与变量共享同一块内存空间应用场景引用适用于函数参数传递、函数返回值和3运算符重载等场景使用引用可以避免拷贝,提高程序的执行效率结构体概述及定义C++结构体概述结构体定义结构体访问123中使用结构体来组织不同类型的中使用结构体名成员变中使用运算符来访问结构体的C++C++struct{C++.数据结构体是一种用户自定义的数量列表的方式来定义结构体结构成员变量例如,结构体名成员变}.据类型,可以包含多个成员变量体名表示结构体的名称,成员变量列量名表示结构体的成员变量表表示结构体的成员变量结构体与指针C++结构体指针指针访问中使用结构体指针来指向结中使用运算符来访问结构C++C++-构体变量结构体指针可以方便体指针指向的结构体的成员变量地访问结构体的成员变量例如,结构体指针成员变量名-表示结构体指针指向的结构体的成员变量动态分配中使用运算符来动态分配结构体变量的内存空间动态分配的结构C++new体变量需要在程序结束时使用运算符释放内存空间,避免内存泄漏delete枚举类型及其特点C++枚举类型1C++中使用枚举类型来定义一组具名的整数常量枚举类型可以提高代码的可读性和可维护性枚举定义2C++中使用enum枚举类型名{枚举常量列表}的方式来定义枚举类型枚举类型名表示枚举类型的名称,枚举常量列表表示枚举类型的枚举常量枚举常量3C++中枚举常量默认从0开始,依次递增可以显式地为枚举常量赋值枚举常量的值必须是整数常量适用场景4枚举类型适用于需要定义一组具名的整数常量的场景例如,可以定义表示颜色的枚举类型,包含红、绿、蓝等颜色常量共用体及其特点C++共用体概述共用体定义注意事项中使用共用体来存中使用共用体中同一时刻只能使C++C++union C++储不同类型的数据,但名成员变量列表的方用共用体中的一个成员{}所有成员变量共享同一式来定义共用体共用变量使用共用体需要块内存空间共用体可体名表示共用体的名称,注意成员变量的类型冲以节省内存空间,但需成员变量列表表示共用突,避免数据错误要注意成员变量的类型体的成员变量冲突位运算符及其应用C++位运算符C++提供了多种位运算符,用于对二进制位进行操作常用的位运算符包括与()、或(|)、异或(^)、取反(~)、左移1()和右移()位与运算符2位与运算符()用于将两个操作数的对应位进行与运算如果两个操作数的对应位都为1,则结果为1,否则为0位或运算符3位或运算符(|)用于将两个操作数的对应位进行或运算如果两个操作数的对应位有一个为1,则结果为1,否则为0位异或运算符4位异或运算符(^)用于将两个操作数的对应位进行异或运算如果两个操作数的对应位不同,则结果为1,否则为0位取反运算符5位取反运算符(~)用于将操作数的每一位取反如果操作数的某一位为1,则结果为0,否则为1面向对象概述C++面向对象封装继承面向对象编程()是一种编程范式,封装是指将数据和操作数据的函数组合在继承是指一个类可以从另一个类继承属性OOP它将数据和操作数据的函数组合在一起,一起,形成一个独立的单元封装可以隐和方法继承可以减少代码的重复编写,形成对象面向对象编程的核心概念包括藏数据的实现细节,只暴露必要的接口给提高代码的可重用性继承可以实现代码封装、继承和多态外部使用封装可以提高代码的安全性和的层次化组织,方便代码的管理和维护可维护性类和对象基本语法C++类定义中使用类名成员变量列表成员函数列表的方式来定C++class{;;}义类类名表示类的名称,成员变量列表表示类的成员变量,成员函数列表表示类的成员函数对象创建中使用类名对象名的方式来创建对象对象名表示对象的名C++;称对象是类的实例,可以访问类的成员变量和成员函数成员访问中使用运算符来访问对象的成员变量和成员函数例如,对C++.象名成员变量名表示对象的成员变量,对象名成员函数名参数..列表表示对象的成员函数类的封装和隐藏C++成员public成员可以在类的内部和外部访问public2成员是类的接口,用于提供给外部public访问控制使用的功能1使用访问控制符来控制类的成员变C++量和成员函数的访问权限访问控制符成员包括、和public private protected private成员只能在类的内部访问private private成员是类的实现细节,用于隐藏类的内部3数据和实现类的继承与派生C++继承派生12中使用继承来实现类的代中使用派生类名继C++C++class:码重用一个类可以从另一个承方式基类名的方式来定义派类继承属性和方法被继承的生类继承方式包括、public类称为基类或父类,继承的类和不同的继privateprotected称为派生类或子类承方式影响基类成员在派生类中的访问权限多继承3支持多继承,一个类可以从多个基类继承属性和方法多继承需要C++注意命名冲突和二义性问题多态性及其实现C++多态性虚函数动态绑定多态性是指同一个函数调用可以根据对中使用虚函数来实现多态性虚函中使用动态绑定来实现多态性动C++C++象的类型执行不同的行为多态性可以数是指在基类中声明为的函数态绑定是指在运行时确定函数调用的对virtual提高代码的灵活性和可扩展性派生类可以重写虚函数,实现不同的行象类型动态绑定可以提高代码的灵活为性和可扩展性虚函数及其应用C++虚函数1C++中使用virtual关键字来声明虚函数虚函数可以在基类中定义,也可以在派生类中重写虚函数用于实现多态性重写2C++中派生类可以重写基类的虚函数重写是指派生类定义与基类虚函数具有相同名称、参数列表和返回类型的函数重写可以改变虚函数的行为纯虚函数3C++中使用virtual返回类型函数名参数列表=0;的方式来声明纯虚函数纯虚函数是指在基类中没有定义的虚函数包含纯虚函数的类称为抽象类应用场景4虚函数适用于需要在运行时确定函数调用的对象类型的场景例如,可以使用虚函数来实现图形类的绘制功能,根据不同的图形类型绘制不同的图形抽象类及其使用C++抽象类接口定义设计模式中使用抽象类来定抽象类可以定义一组接抽象类常用于设计模式C++义一组接口抽象类是口,用于约束派生类的中,例如模板方法模式、指包含纯虚函数的类行为派生类必须实现策略模式等使用抽象抽象类不能被实例化,抽象类中的纯虚函数,类可以提高代码的灵活只能被继承才能被实例化性和可扩展性友元函数及其作用C++友元函数C++中使用friend关键字来声明友元函数友元函数是指可以访问类的private和protected成员的函数友1元函数不是类的成员函数友元类2C++中也可以声明友元类友元类是指可以访问另一个类的private和protected成员的类友元类可以方便地访问另一个类的内部数据破坏封装3C++中使用友元函数和友元类可以破坏类的封装性因此,需要谨慎使用友元函数和友元类,避免过度破坏封装适用场景4友元函数适用于需要在类的外部访问类的内部数据的场景例如,可以使用友元函数来实现运算符重载运算符重载及其实现C++运算符重载重载方式注意事项允许重载运算符,使得运算符可以用中可以使用成员函数或友元函数来重中并非所有运算符都可以重载有些C++C++C++于自定义类型运算符重载可以提高代码载运算符成员函数重载运算符的第一个运算符,例如、、等,不能被重.::sizeof的可读性和可维护性操作数是类的对象,友元函数重载运算符载运算符重载需要注意保持运算符的语的两个操作数都是函数参数义,避免引起混淆动态内存分配C++动态内存中使用运算符来动态分配内存空间动态分配的内存空C++new间可以在运行时确定大小动态分配的内存空间需要手动释放,避免内存泄漏运算符new中使用类型名的方式来动态分配单个对象的内存空间C++new使用类型名数组长度的方式来动态分配数组的内存空间new[]运算符delete中使用指针名的方式来释放动态分配的单个对象的内C++delete存空间使用指针名的方式来释放动态分配的数组的内delete[]存空间异常处理机制C++语句try中使用语句来包含可能抛出异常的C++try代码块如果在语句中的代码抛出了try2异常,则会跳转到对应的语句进行catch异常处理处理1中使用语句来处理异常C++try-catch语句语句用于包含可能抛出异常的代码块catchtry语句用于捕获并处理异常catch中使用语句来捕获并处理异常C++catch语句可以指定捕获的异常类型如catch果抛出的异常类型与语句指定的异catch3常类型匹配,则会执行语句中的代catch码模板概述及其应用C++模板概述函数模板类模板123中使用模板来实现泛型编程模中使用返回类型函数中使用类名成C++C++template C++template class{板可以定义通用的函数和类,用于处名参数列表的方式来定义函数模板员变量列表成员函数列表的方式;;}理不同类型的数据类型名表示模板参数的类型编译器来定义类模板类型名表示模板参数根据实际使用的类型来生成对应的函的类型编译器根据实际使用的类型数来生成对应的类标准模板库C++STL概述容器STL标准模板库()是一组通容器用于存储数据常用的C++STL STL用的模板类和函数,用于实现常容器包括、、、vector listdeque用的数据结构和算法包括、等不同的容器具有不STL setmap容器、迭代器、算法和函数对象同的特点,适用于不同的场景等组件迭代器迭代器用于访问容器中的元素迭代器类似于指针,可以用于遍历容STL器中的元素常用的迭代器包括、、iterator const_iterator reverse_iterator等文件操作概述C++文件操作1C++中使用文件操作来读取和写入文件文件操作可以用于存储和读取程序的数据文件流2C++中使用文件流来实现文件操作文件流包括ifstream(输入文件流)、ofstream(输出文件流)和fstream(文件流)打开文件3C++中使用open函数来打开文件open函数需要指定文件名和打开模式打开模式包括ios::in(输入模式)、ios::out(输出模式)、ios::app(追加模式)等关闭文件4C++中使用close函数来关闭文件关闭文件可以释放文件资源,避免文件损坏文件读写操作C++读取文件写入文件文件指针中使用运算符或中使用运算符来中使用文件指针来C++C++C++函数来读取文件写入文件运算符用定位文件中的数据可getline运算符用于读取格式于写入格式化的数据以使用函数和seekg化的数据,函数函数来移动文件getline seekp用于读取一行数据指针预处理器及其指令C++预处理器C++预处理器是在编译之前执行的程序预处理器用于处理预处理指令,例如#include、#define、#ifdef1等指令#include2#include指令用于包含头文件头文件中包含了函数、类和变量的声明使用#include指令可以方便地使用头文件中定义的函数、类和变量指令#define3#define指令用于定义宏宏是一种文本替换工具使用#define指令可以定义常量和函数宏指令#ifdef4#ifdef指令用于条件编译使用#ifdef指令可以根据条件选择编译不同的代码块#ifdef指令常用于平台兼容和调试代码复习总结与展望课程回顾未来展望感谢参与本课程系统地回顾了语言的核心概念语言在不断发展,新的标准不断发布感谢您参与本次语言复习教程希望C++C++C++和技术,包括基本语法、面向对象编程、建议您持续学习的新特性,并关注本次教程对您有所帮助祝您在的学C++C++模板和等通过本课程的学习,您应在各个领域的应用希望您能够运用习和工作中取得更大的成就!STL C++该对语言有了更深入的理解,并能够语言,创造出更加优秀的软件作品C++C++灵活运用到实际开发中。
个人认证
优秀文档
获得点赞 0