还剩29页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
编程入门C++欢迎来到编程入门课程!这门课程专为初学者设计,将带领你从零开C++始掌握编程的基础知识和核心概念通过系统学习,你将逐步建立编C++程思维,掌握解决问题的能力作为一种功能强大的编程语言,广泛应用于系统软件、游戏开发、嵌C++入式系统等众多领域本课程将为你打开编程世界的大门,奠定坚实的技术基础让我们一起开启这段学习之旅吧!课程概述课程目标学习路线12本课程旨在帮助零基础学习我们将从C++基础语法开始,者掌握C++编程的基本语法逐步过渡到面向对象编程,和核心概念,建立面向对象再到高级特性和标准库的使编程思维,具备独立开发简用课程采用循序渐进的方单C++程序的能力通过系式,结合理论讲解和实战练统化学习,你将能够理解并习,确保每位学员都能扎实运用C++语言解决实际问题掌握各项技能先修知识3本课程不要求学员有编程经验,但具备基本计算机操作能力是必要的如果你有其他编程语言的基础(如或),将有助Python Java于更快理解的概念,但这不是必需的先决条件C++简介C++的历史C++1由比雅尼斯特劳斯特鲁普于年开始设计开发,C++·Bjarne Stroustrup1979最初被称为带类的年,它被正式命名为,意为的增强版经过C1983C++C多年发展,标准不断更新,包括、、、和C++C++98C++11C++14C++17等重要版本C++20的特点C++2是一种静态类型、编译型、通用的、大小写敏感的自由形式编程语言它C++支持多种编程范式,包括过程式编程、面向对象编程和泛型编程结合了C++高级语言的抽象特性和低级语言的效率,提供了强大的内存控制能力的应用领域C++3由于其高效率和灵活性,广泛应用于系统软件、游戏开发、嵌入式系统、C++高性能服务器、图形学、人工智能和科学计算等领域许多知名软件如操作系统、游戏引擎和谷歌浏览器都是用Windows UnrealEngine ChromeC++开发的开发环境搭建选择IDE集成开发环境能大幅提高编程效率对于初学者,推荐使用IDE Visual、跨平台或跨平台这些提供代码StudioWindows Code::BlocksCLionIDE编辑、自动补全、调试工具等功能,使开发过程更加便捷也可以选择轻量级编辑器如配合编译器使用Visual StudioCode安装步骤以为例访问官网下载免Visual StudioMicrosoft Visual Studio Community费版;运行安装程序,选择使用的桌面开发工作负载;完成安装后,C++可能需要重启计算机其他也有类似的安装向导,通常只需按照提示操作IDE即可配置编译器大多数已包含编译器使用编译器,IDE C++VisualStudioMSVC通常捆绑的版本如需单独配置,可Code::Blocks MinGWGCCWindows下载或,并将其添加到系统环境变GCCLinux/macOS MinGWWindows量中,使命令行能够识别编译命令第一个程序C++示例代码结构解析编译与运行Hello World传统上,学习任何编程语言都从一个典型的程序包含头文件包含、在中,通常可以通过按或点击Hello C++IDE F5程序开始这个简单程序的目标主函数定义等部分主函数是构建并运行按钮来编译和执行程序World main是在屏幕上显示Hello,World!文本程序的入口点,程序从这里开始执行在命令行中,则需要使用编译命令如它虽然简单,但包含了程序的基本结构,iostream头文件提供了输入输出功能,g++hello.cpp-o hello生成可执行文为后续学习奠定基础using namespacestd允许直接使用标件,然后运行该文件成功执行后,将准库中的函数和对象在控制台看到输出结果基本语法C++注释标识符C++支持两种类型的注释单行注释标识符是用来命名变量、函数、类等和多行注释单行注释以开始,直程序元素的名称标识符必须以//C++到行尾结束;多行注释以/*开始,以字母或下划线开头,后跟字母、数字结束,可跨越多行注释不会被编或下划线区分大小写,因此*/C++译,仅用于解释代码,提高可读性Count和count是不同的标识符良好的注释习惯对代码维护非常重要标识符不能使用C++关键字,也不应使用带有双下划线或下划线后跟大写字母的名称关键字关键字是语言预定义的保留字,有特定的语法含义,不能用作标识符C++C++有大约个关键字,包括、、、、、等了解这些关90int floatclass returnif else键字的含义和用法是掌握编程的基础随着标准的更新,关键字列表也C++C++在扩展数据类型自定义数据类型允许用户自定义数据类型,如结构体C++、类和枚举这些struct classenum类型可以组合基本类型和其他自定义类型,基本数据类型2创建更复杂的数据结构,更好地表达问题提供了多种基本数据类型,包括整型C++域的概念和关系、、、、浮点型int shortlong longlong、、、字符型float doublelong double1类型转换、和布尔型每种char wchar_t bool支持隐式类型转换和显式类型转换C++类型占用不同大小的内存空间,适合存储隐式转换自动发生,如将赋值给;int double不同范围的数据显式转换需要转换操作符,如、static_cast
3、和dynamic_cast const_cast风格的类型转换reinterpret_cast C也仍被支持,但不推荐使用typevalue变量与常量变量声明与初始化常量定义作用域和生命周期变量是内存中存储数据常量是值不能被修改的变量的作用域决定了它的命名空间在C++中,变量C++中定义常量在代码中的可见性范围,变量必须先声明后使用,主要有两种方式使用主要有全局作用域、命声明包括类型和名称,const关键字如const名空间作用域、函数作如int count;变量可double PI=
3.14159;用域和块作用域变量以在声明时初始化,如和使用#define预处理指的生命周期是它在内存int count=0;,也可令如#define PI中存在的时间段全局以使用统一初始化语法,
3.14159推荐使用变量的生命周期与程序如int count{0};未const,因为它提供类型相同,局部变量从声明初始化的变量包含未定检查并可以在调试时查点开始到所在块结束义的值,可能导致程序看C++11引入了理解作用域和生命周期错误constexpr,用于编译时有助于避免命名冲突和计算的常量内存问题运算符类别运算符作用算术运算符+,-,*,/,%执行基本的数学运算,如加法、减法、乘法、除法和取余关系运算符==,!=,,,=,=比较两个值,结果为布尔值或true false逻辑运算符,||,!执行逻辑与、逻辑或和逻辑非操作位运算符,|,^,~,,对整数的二进制位执行操作赋值运算符=,+=,-=,*=,/=,%=,=,将右侧表达式的值赋给左|=,^=,=,=侧变量其他运算符sizeof,,:,.,-,++,--,,执行特定的操作,如获取*,new,delete类型大小、条件表达式、成员访问等表达式与语句表达式求值表达式是由运算符和操作数组成的代码片段,能够产生一个值在中,表C++达式求值遵循运算符优先级和结合性规则优先级决定了运算符的执行顺序,例如乘除优先于加减结合性则决定了相同优先级运算符的执行顺序,如从左到右或从右到左语句类型语句是程序的基本执行单位,以分号结束常见类型包括声明语句定义C++变量或函数、赋值语句修改变量值、条件语句、循环语句、if-else for、跳转语句、、和表达式语句调用函数每while break continue return种语句类型都有特定的语法规则和执行逻辑复合语句复合语句也称为块是由一对花括号包围的一组语句序列它可以出现在任{}何需要单个语句的地方,如语句的条件分支或循环体复合语句创建了一个if新的作用域,其中声明的变量仅在该块内可见这有助于组织代码和控制变量的生命周期控制流程条件语句语句if语句是最基本的条件语句,用于在条件为真时执行特定代码块语法为条件语句条件必须是布尔表达式或能if if;1转换为布尔值的表达式如果条件为真非零,则执行语句;否则跳过该语句继续执行后续代码语句if-else语句扩展了语句,允许在条件为假时执行替代代码语法为条件语句语句if-else ifif1;else2当条件为真时执行语句,否则执行语句这种结构确保两个代码分支中的一个总会被2;12执行,适用于需要明确处理两种情况的场景语句switch语句用于多路分支,基于一个整型或枚举表达式的值选择执行switch路径语法包括关键字、控制表达式和多个标签每个switch case3后跟一个常量值和要执行的语句,通常以结束以防止执行case break后续语句常用于替代多个结构,使代码更清晰case switchif-else if控制流程循环语句循环while循环在条件为真时重复执行代码块while语法为条件语句循环开始前先while;检查条件,如果为真则执行语句,然后重循环for新检查条件,直到条件为假循环适2while循环适用于需要精确控制迭代次数的情for用于事先不知道精确迭代次数的情况,如况语法为初始化条件更新语for;;等待用户输入特定值句;初始化部分在循环开始前执行一次;1条件在每次迭代前检查,为假时结束循环;循环do-while更新部分在每次迭代后执行循环常用for循环类似于循环,但保证至do-while while于数组遍历等有明确边界的场景少执行一次循环体语法为语句do;3while条件;先执行语句,然后检查条件,如果为真则继续循环这种循环适用于需要至少执行一次操作的场景,如显示菜单并获取用户选择跳转语句语句语句1break2continue语句用于立即终止当前循环语句用于跳过当前循环breakcontinue或switch语句的执行,控制流程跳迭代的剩余部分,直接进入下一次转到循环或语句后的下一条迭代在循环中,控制流跳转switch for语句在嵌套循环中,只能到更新表达式;在或break whiledo-跳出最内层循环常用于在循环中,跳转到条件检查break while特定条件满足时提前结束循环,如continue通常用于在特定条件下在数组中找到目标元素后停止搜索,跳过某些处理步骤,如跳过不符合避免不必要的迭代条件的数组元素语句3goto语句提供无条件跳转到程序中带标签的位置语法为标签,而标goto goto;签定义为标签语句虽然支持,但现代编程实践一般不推荐使用,:C++goto因为它可能导致代码难以理解和维护,俗称意大利面条式代码大多数情况下,循环和条件语句可以更清晰地表达控制流程函数基础函数定义函数声明函数是一组执行特定任务的语句的集函数声明向编译器提供函数的信息,合C++函数定义包括返回类型、函而不定义其实现声明包括返回类型、数名、参数列表和函数体语法为函数名和参数类型,但没有函数体,返回类型函数名参数列表{函数以分号结束函数必须在使用前声明,体}返回类型指定函数返回值的数这通常在头文件中完成声明使函数据类型,可以是任何有效类型,包括可以在定义之前被调用,促进了模块void无返回值函数体是包含在花化编程和单独编译括号内的语句序列函数调用函数调用是执行函数的过程,通过函数名和提供实参的方式实现调用时,程序控制转移到函数代码,执行完成后返回调用点实参必须与函数参数列表匹配类型和数量,否则会导致编译错误或意外行为函数调用可以作为表达式的一部分,其值为函数的返回值函数参数值传递引用传递默认参数值传递是C++中最基本的参数传递方式,引用传递通过引用参数传递变量的别名,C++允许为函数参数指定默认值,在调函数接收实参的副本当函数修改参数而非副本语法为类型参数名函用时可省略这些参数默认参数必须从时,只影响副本,不影响原始变量这数对参数的修改直接影响原始变量,因右到左指定,不能在参数列表中间留空种机制保护了原始数据不被意外修改,为它们引用同一内存位置引用传递避语法为类型参数名=默认值默认增强了程序的安全性然而,对于大型免了复制开销,适用于大型对象或需要参数通常在函数声明中指定,而非定义对象,复制可能导致性能开销,因为需修改实参的场景为防止意外修改,可中这一特性使函数更灵活,能适应多要分配额外内存并复制所有数据使用const引用const类型,既保持种调用情况,减少了需要创建的重载函效率又保护数据数数量函数重载重载决议编译器根据函数调用中提供的实参类型和数量选择最匹配的重载版本1重载示例2如、和可以共存且分别处理不同类型printint xprintdouble xprintchar*s重载规则3函数必须有不同的参数列表类型或数量,仅返回类型不同不足以构成重载重载概念4允许多个同名函数使用不同参数,根据参数类型自动选择合适版本函数重载是面向对象特性的重要组成部分,它极大地提高了代码的可读性和可维护性通过重载,可以使用同一个函数名表达相似的操作,而不必为每种C++情况创建不同的函数名标准库大量使用了函数重载,例如库中的重载支持输出不同类型的数据重载与默认参数结合使用时需要谨慎,以避免调用歧义合C++iostream operator理设计重载函数可以使更直观、更易用API内联函数内联函数定义内联函数优缺点使用场景内联函数是使用inline关内联函数的主要优点是内联函数最适合用于简键字声明的特殊函数,消除了函数调用开销,短、频繁调用且不涉及它建议编译器在调用点包括参数压栈、跳转和递归的函数典型例子展开函数体代码,而不返回等操作,从而提高包括访问器函数是执行普通的函数调用执行效率缺点是可能getter/setter、小型内联函数可以在头文件增加代码体积,因为函工具函数和简单的数学中定义,不违反单一定数代码会在每个调用点运算类定义中直接实义规则通常,内联函复制此外,复杂函数现的成员函数默认被视数的定义与声明在同一的内联可能导致指令缓为内联候选现代编译个位置,以确保编译器存效率降低,反而影响器具有智能优化,能够能看到完整的函数体性能编译器可能忽略自动决定适合内联的函关键字,自行决定数,使显式关键字inline inline是否内联的重要性有所降低递归函数递归原理递归是一种函数调用自身的编程技术递归函数包含基本情况终止条件和递归情况两部分当问题满足基本情况时,函数直接返回结果;否则,函数将问题分解为更小的子问题,通过调用自身来解决这些子问题,并将结果组合起来解决原问题每次递归调用都在栈上创建新的函数帧递归示例阶乘计算是递归的典型示例,用递归实现时,基本情况n!=n×n-1!1!=1是或时返回,递归情况是时返回其他常见递归实例包括n=0n=11n1n×n-1!斐波那契数列计算、汉诺塔问题、二叉树遍历和快速排序等算法,这些问题都能自然地分解为相似的子问题递归与迭代递归和迭代循环是两种解决重复任务的方法递归通过函数调用实现重复,而迭代通过循环结构实现递归通常更容易理解和实现,特别是对树结构等复杂数据结构的操作然而,递归可能导致栈溢出,且通常比迭代消耗更多内存和资源许多递归算法可以转换为迭代形式以提高效率CPU数组数组是存储相同类型元素的固定大小序列在中,数组声明语法为类型名称大小,如创建一个包含个整数的数C++[]int scores
[10];10组数组索引从开始,最后一个元素的索引是数组大小减访问越界元素会导致未定义行为,可能破坏内存或造成程序崩溃C++01多维数组可以看作数组的数组,如定义一个行列的二维数组数组作为函数参数传递时,实际上传递的是指向第int matrix
[3]
[4];34一个元素的指针,因此函数内对数组元素的修改会影响原数组引入了容器,提供了更安全、更功能丰富的数组替代品C++11std::array字符串风格字符串C风格字符串是以空字符结尾的字符数组它们可以使用字符数组或字符指针表示,C\0如或简写为char greeting
[6]={H,e,l,l,o,\0};char greeting[]=Hello;提供了库,包含处理风格字符串的函数,如、、C++cstringstring.h Cstrlen strcpy和等虽然使用简单,但风格字符串容易出现缓冲区溢出和内存泄漏strcat strcmpC问题类string标准库提供了类,它是字符串的面向对象表示,定义在头文件中C++string string对象自动管理内存,动态调整大小,避免了许多风格字符串的常见问题创string C建对象可以使用构造函数或直接赋值,如string stringgreeting=Hello;类提供了丰富的成员函数,使字符串操作更加安全和便捷string字符串操作类支持多种操作,包括连接运算符或方法、子串提取string+append、查找、替换等它还支持通过运算符或方法substr findreplace[]at访问单个字符,通过或获取字符串长度对象可以与风格size lengthstring C字符串互相转换方法返回风格字符串,而构造函数可以从风格c_str Cstring C字符串创建对象string指针基础指针概念指针声明与初始化12指针是存储内存地址的变量在指针声明使用符号,如或C++*int*ptr;中,指针是强类型的,意味着它们指int*ptr;两种写法等效声明一个指向特定类型的数据指针使程序能够向整数的指针新声明的指针包含未直接访问和操作内存,提供了强大的定义的值,应该在使用前初始化指内存管理能力指针在数据结构、动针可以初始化为指向现有变量使用态内存分配和函数参数传递等方面有运算符获取地址、动态分配的内存、广泛应用理解指针是掌握高级另一个指针的值,或表示空指C++nullptr特性的关键针未初始化或错误初始化的指针是许多程序错误的源头指针运算3支持指针算术运算,包括增加、减少、加法和减法这些操作基于C++++--+-指针类型自动调整偏移量例如,对于类型指针,会使指针前进int*ptr++sizeofint个字节指针也可以比较、、等,通常用于比较数组中的位置解引用操作符==用于访问指针指向的值,如将赋给指向的整数**ptr=10;10ptr指针与数组12数组名特性指针数组在大多数表达式中,数组名会隐式转换为指向第一个指针数组是元素为指针的数组,声明为类型*数组名元素的指针这就是为什么数组可以用指针符号访问,[大小],如int*ptrs
[5];创建一个包含5个int指针如arr[i]等价于*arr+i然而,数组名不是真正的数组每个元素都可以指向不同的整数对象指针的指针变量,它不能被修改,也不占用指针变量的存数组常用于管理动态分配的对象集合或实现字符串数储空间在和运算符作用下,数组名表示整组如命令行参数遍历指针数组通常需要确保sizeofargv个数组每个指针都已正确初始化3数组指针数组指针是指向数组的指针,声明为类型指针*名大小,如声明一个指向包[]int*pArray
[10];含个整数的数组的指针括号确保操作符与指针10*名结合,而非类型数组指针常用于处理多维数组,特别是作为函数参数传递二维数组时正确理解数组指针的类型和用法对于处理复杂数据结构至关重要动态内存管理动态数组使用和可以分配和释放动态数组,如new[]delete[]分配个整数的数组必须int*arr=new int
[5];5使用释放用分配的内存,如delete[]new[]delete[]和运算符new deletearr;,以确保正确调用每个元素的析构函数对于非基本类型动态数组的大小可以在运行时确定,这C++提供new和delete运算符进行动态内存分配和2比固定大小的数组更灵活,但需要手动管理内存释放在堆上分配内存并返回相应类型的指针,new如分配一个初始值为的整int*p=new int10;101数释放动态分配的内存,如delete deletep;内存泄漏对于基本类型,调用全局函数分new operatornew配内存;对于类类型,还会调用构造函数初始化对内存泄漏发生在动态分配的内存未被释放时,导致象类似地可能调用析构函数delete程序占用的内存不断增加常见原因包括忘记调用、指针重新赋值前未释放原内存、3delete/delete[]异常导致未执行等内存泄漏可能导致程序delete性能下降,甚至系统崩溃使用智能指针如、可以帮助自动管理内存,unique_ptr shared_ptr减少泄漏风险引用引用概念引用指针常量引用vs引用是已存在变量的别名,提供了一种引用和指针都能实现间接访问,但有几常量引用const reference是指向常量不使用指针就能间接访问对象的方法个关键区别引用必须初始化且不能重的引用,声明为const类型名称,引用在声明时必须初始化,并且一旦绑新绑定,而指针可以在任何时候改变目如const intcref=val;常量引用定到一个对象,就不能再绑定到其他对标;引用不占用额外内存通常由编译不允许通过引用修改被引用的对象,但象引用使用符号声明,如int ref器优化实现,而指针是真实的变量;被引用对象本身可以通过其他方式修改创建一个绑定到变量的整数引用不支持多级间接没有引用的引用除非它也是常量常量引用主要用于=var;var引用通过引用的所有操作都直接影响,而指针可以多层嵌套;引用语法更函数参数,允许函数高效访问参数避被引用的对象,就像操作原始变量一样简洁,不需要解引用操作符免复制同时保证不会修改参数它们也可以绑定到临时对象,延长临时对象的生命周期结构体结构体定义结构体成员访问结构体是中一种用户自定义的复合结构体变量的成员可以通过点运算符C++.数据类型,可以组合不同类型的数据项访问,如person.name=张三;对使用关键字定义,如于结构体指针,使用箭头运算符访问struct struct-结成员,如,这等Person{string name;int age;};pPerson-age=25;构体成员可以是任何有效的数据类型,价于*pPerson.age=25;结构体初包括基本类型、数组、指针,甚至其他始化可以使用大括号列表,如Person p结构体在中,结构体可以包含成张三,或的统一初始化C++={,25};C++11员函数,使其与类非常相似语法Person p{张三,25};结构体数组结构体数组是元素类型为结构体的数组声明方式为结构体名数组名大小,如[]创建一个可容纳个结构体的数组访问结构体数组元Person people
[100];100Person素的成员需要组合数组访问和成员访问,如表示第一个的people
[0].name Person成员结构体数组常用于表示同类对象的集合,如学生名单或产品目录name枚举枚举类型定义枚举常量枚举应用123枚举是一种用户自定义类型,由一组具名整枚举常量是枚举类型的可能值默认情况下,枚举可以增强代码可读性和可维护性,通过型常量组成C++支持两种枚举传统枚举第一个枚举项的值为0,后续项递增可以使用有意义的名称代替魔法数字它们常用enum和强类型枚举enum class,C++11显式指定值,如enum Size{SMALL=5,于表示有限集合的选项,如菜单选择、状态引入传统枚举使用enum名称{枚举项MEDIUM=10,LARGE=20};未指定值代码或配置选项强类型枚举提供了更好的列表};定义,如enum Color{RED,的枚举项取前一项的值加1传统枚举的常类型安全性,避免了与整数类型的隐式转换,GREEN,BLUE};强类型枚举使用enum量位于封闭作用域内,可能与其他标识符冲减少错误枚举还可以与switch语句结合使class名称{枚举项列表};定义,如enum突;强类型枚举的常量需要使用作用域解析用,处理不同的枚举值对应的逻辑运算符访问,如class Direction{NORTH,EAST,SOUTH,Direction::NORTHWEST};类与对象基础对象创建对象是类的实例,代表类定义的具体实体创建对象的过程称为实例化,可以通过多种方式进行栈上分配、动态分配Student s1;Student*s2=new类的定义或使用统一初始化语法Student;Student s3{};2创建对象时会调用构造函数初始化对象的状态对象类是中实现面向对象编程的基本单元,是数据和C++可以作为函数参数、返回值,也可以存储在容器中操作数据的函数的封装使用关键字定义,如classclass Student{public:string name;int age;void类定义包括成员变量属性和成员函1成员访问display;};数方法,可以分为公有、保护public protected对象的公有成员可以通过点运算符访问,如.和私有三种访问级别类是一种用户自定private李四对于指针,使用箭头运算符s
1.name=;-义类型,描述了一类对象的共同特征,如私有和保护成员只能通过类s2-age=20;3的成员函数或友元访问,这实现了数据封装静态成员通过类名和作用域解析运算符访问,如::,无需创建对象成员访问受Student::totalCount访问控制修饰符的限制类的成员函数成员函数定义成员函数是属于类的函数,用于操作类的数据成员可以在类内部定义隐式内联或在类外部使用作用域解析运算符定义类::1外定义的语法为返回类型类名函数名参数列表函数体成员函数可以访问类的所有成员,包括私有成员,这是实现数据::{}封装的关键机制内联成员函数内联成员函数是编译器优化的目标,尝试在调用点展开函数代码而非执行函数调用在类内部定义的成员函数默认为内联候选也可以在类外使用关键字显式声明,如inline inlinevoid2内联适合简短、频繁调用的函数,可以提高执行效率,但可能增加代码体Student::display{...}积成员函数const成员函数承诺不修改对象的状态数据成员,声明时在函数参数列表const后加上关键字,如这些函数可以被对const voiddisplay const;const3象调用,在函数内部不能修改非静态数据成员,也不能调用非成员函const数正确性是良好代码的重要特性,有助于防止意外的状态修改const C++和启用编译器优化构造函数与析构函数构造函数析构函数构造函数是特殊的成员函数,用于初始析构函数是在对象销毁时自动调用的特化对象的状态它与类同名且没有返回殊成员函数,用于释放资源和执行清理类型,在对象创建时自动调用类可以操作它与类同名,前缀为波浪符~,有多个重载的构造函数,包括默认构造无参数和返回类型,如~Student函数无参数、参数化构造函数和复制构每个类只能有一个析构函数析构函数造函数如未定义任何构造函数,编译对于管理动态分配的资源如new创建的器会生成一个默认构造函数,但如果定内存至关重要,能防止内存泄漏栈对义了任何构造函数,则需要显式定义默象超出作用域或delete用于堆对象时会认构造函数或使用C++11的=default调用析构函数初始化列表构造函数初始化列表是中初始化类成员的高效方式,位于构造函数参数列表后,函C++数体前,使用冒号和逗号分隔的初始化器列表表示,如Studentstring n,int a:对于常量成员、引用成员和没有默认构造函数的成员,必须使用namen,agea{}初始化列表它避免了先默认初始化再赋值的过程,提高了效率访问控制与封装封装的意义保护数据不被外部直接访问,提高代码的安全性和可维护性1友元函数与友元类2允许特定外部函数或类访问私有成员,提供受控的访问机制protected3保护成员可被派生类访问,但对外部仍然隐藏private4私有成员只能被类内部成员函数和友元访问public5公有成员可被任何代码访问,构成类的接口访问控制是面向对象编程的核心概念,直接实现了封装原则通过恰当设置成员的可见性,可以隐藏实现细节,只暴露必要的接口,使类更易于使用且更不易误用C++良好的封装实践包括将数据成员设为私有,提供公有访问器方法;只公开必要的接口;使用而非以便派生类可以访问;谨慎使用友元,避免破坏封装高质量的类设protected private计应该提供一个清晰、直观的公共接口,同时隐藏所有实现细节,使类既安全又灵活对象数组与指针对象数组对象指针指针this对象数组是元素类型为类的数组,可以对象指针是指向类对象的指针,允许动this是一个特殊的指针,隐式存在于每存储同一类型的多个对象实例创建对态创建对象和间接访问对象声明对象个非静态成员函数中,指向调用该函数象数组时,每个元素都会调用类的构造指针的语法为类名*指针名;,如的对象它允许成员函数识别操作的是函数初始化如Student Student*pStudent;可以让指针指哪个对象实例,特别是当同一函数被多将创建一个包含个向现有对象个对象调用时可用于访问成员students
[3];3pStudent=student;this对象的数组,调用默认构造函或动态分配的对象、防止名称冲突Student pStudent=new this-name this-数;也可以使用初始化列表显式初始化Student;通过指针访问对象成员使name=name;、实现链式调用每个对象,如用箭头运算符,如和区分对象身份Student students
[2]=-pStudent-return*this;this{{张三,20},{李四,22}};访问对name动态分配的对象必须使用指针是隐式的,不需要声明,但可以显象数组元素的成员使用数组索引和点运delete释放,以防内存泄漏式使用算符,如students
[0].name。
个人认证
优秀文档
获得点赞 0