C++学习要点及总结.doc_第1页
C++学习要点及总结.doc_第2页
C++学习要点及总结.doc_第3页
C++学习要点及总结.doc_第4页
C++学习要点及总结.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+学习要点及总结 第 16 页 共 16 页C+学习要点及总结第2章 C+简单程序设计1第3章 函数3第4章 类与对象4第5章 C+程序的结构5第6章 数组、指针与字符串6第7章 继承与派生10第8章 多态性11第9章 群体类和群体数据的组织12第11章 流类库与输入输出14第12章 异常处理15第2章 C+简单程序设计本章介绍了C+程序的基本结构,程序的基本语法单位字、词和表达式构成的语法规则;介绍了选择结构和循环结构程序设计。程序的主要功能是描述数据和处理数据。数据表现为常量和变量。常量是程序运行中不能改变的量,变量是内存单元的标识。所有的常量、变量都属于某种数据类型。类型决定了数据的操作方式。关键字const用于约束对象为只读。运算符表示了系统提供对基本数据的操作。不同类型的数据可以进行不同运算。各种运算符有不同的功能、优先级和结合方向。表达式是由常量、变量和运算符连接起来,表达一个计算值的式子。C+用标准流对象实现数据的输入和输出。输入语句、输出语句和表达式语句可以构成顺序执行的简单程序。C+构成选择结构的条件语句有if语句和switch语句。if语句有两种形式:一个分支的if语句和两个分支的if_else语句。if语句适用于条件判断比较复杂的分支结构。嵌套if语句采用就近匹配的原则。用 改变复合语句结构,可以改变if与else的匹配关系。switch语句根据一个表达式的不同可能值决定选择执行,适用于条件判断比较简单的多路选择。case语句仅仅是标号语句,没有跳转功能。要在执行分支语句后离开switch结构,需要用break语句。循环结构有while语句、do_while语句和for语句。while语句和do_while语句主要用于条件循环。for语句是C+中很灵活的循环语句,即可以用于控制次数循环,也可以用于条件循环。设计循环结构程序时,必须要知道循环体的算法是什么,进入循环的条件是什么,结束循环的条件是什么,确保正确控制程序的流程。while循环、do_while语句和for语句可以互相嵌套构成多重循环结构。break语句只能在switch语句或循环体中使用。continue语句只能在循环体中使用。goto语句的使用不符合“结构化程序设计”的思想,应尽量少用或不用。返回页首目录第3章 函数本章主要介绍函数的声明、定义和调用,函数参数的传递,以及函数重载。函数是程序设计的重要工具。函数的作用是程序的功能划分和代码重用。C+提供了大量的预定义函数,称为库函数或标准函数。用户自定义函数可以解决特殊的用途。函数的参数是函数与外部通信的接口。函数定义的参数称为形式参数;调用函数的参数称为实际参数。C+函数有三种参数:传值参数、引用参数和指针参数。他们以不同的方式传递数据。return语句可以通过匿名对象使函数返回一个表达式的值,也就是说,在函数执行return语句时,将创建一个匿名对象临时存放函数的返回结果。这个匿名对象在返回调用之后被撤销。内联函数是为减少调用开销的小程序。重载函数是名字相同、实现版本不同的函数。是一种简单的多态。函数可以用语句或表达式调用。已经定义的函数可以互相调用,可以递归调用。main函数是程序的启动函数,其它函数不能调用它。调用一个函数需要的信息包括:函数地址和对应的实际参数。函数名是函数的地址。可以用名方式调用函数,也可以用函数指针间接调用函数。返回页首目录第4章 类与对象本章主要介绍了类和对象,同时也介绍了类的组合。在C+中,面向对象程序设计的思想是通过类和对象来实现的。类类型是结构类型(如:struct)的拓展,通常用关键字class定义。类是数据成员和成员函数的封装。类的实例称为对象。数据成员是类的属性,可以是各种合法的C+类型,包括类类型。成员函数用于操作类的数据或在对象之间发送消息。类成员由private,protected和public决定访问特性。public成员集称为类的接口。不能在类的外部访问private成员。构造函数是特殊的成员函数,在创建和初始化对象时自动调用。析构函数则在对象作用域结束时自动调用。在面向对象程序设计中,可以对复杂对象进行分解、抽象,把一个复杂对象分解为简单对象的组合,由比较容易理解和实现的部件对象装配而成。类的组合(也称聚集),描述的就是一个类内嵌其它类的对象作为成员的情况,它们之间的关系是一种包含与被包含的关系。当创建类的对象时,如果这个类具有内嵌对象成员,那么各个内嵌对象也将被自动创建。在创建对象时既要对本类的基本数据成员进行初始化,又要对内嵌对象成员进行初始化。因此,必须搞清楚组合类构造函数与一般类构造函数之间的区别。返回页首目录第5章 C+程序的结构本章主要介绍了标识符的作用域与生存期、数据共享的三种形式(局部变量、全局变量、数据成员)、静态成员的作用与使用规则、友元、共享数据的保护(常引用、常对象、用const修饰的类成员)、多文件结构和编译预处理命令。标识符存储特性确定了标识符在内存中的生存时间和连接特性。标识符作用域是在程序正文中能够引用这个标识符的那部分区域。一个结构性好的程序应该遵循最低权限访问的原则,尽量不要用全局变量。在C+程序中,函数之间的数据共享一般可以通过局部变量、全局变量、类的数据成员、类的静态成员以及友元来实现。在其中最常用的三种数据共享形式中,局部变量具有局部作用域,能够在调用和被调用函数之间通过参数进行数据传递;全局变量具有文件作用域,可以被整个程序的各个函数共享;类的数据成员可以被类的成员函数共享。静态成员是局部于类的成员,它提供一种同类对象的共享机制。静态数据成员在编译时建立并初始化存储空间。静态数据成员和静态成员函数依赖于类而使用,与是否建立对象无关。由于类具有封装和信息隐藏的特征,使得其私有数据成员不能够被其它函数所访问。友元的提出就是为了解决如何让一个在类外部定义的函数访问类的私有成员的问题。友元是类对象操作的一种辅助手段,友元不是该类的成员函数,只是一个在该类外部定义的其它函数,但是却可以访问该类的私有成员。虽然数据隐藏保证了数据的安全性,但各种形式的数据却又不同程度地破坏了数据的安全。因此,对于既需要共享又需要防止改变的数据应该声明为常量进行保护,因为常量在程序运行期间是不可改变的。常引用所引用的对象不能被更新。如果用常引用做形参,便不会发生对实参意外的更改,而且可以继续发挥其节省空间的作用。常对象的数据成员值在对象的整个生存期内不能被改变。通过常对象只能调用它的常成员函数,而不能调用其它成员函数(这就是C+从语法机制上对常对象的保护,也是常对象唯一的对外接口方式)。C+程序可以由多个程序文件构成。一个大的应用程序,通常由不同功能的文件组成,这有益于程序的分工和扩充。无论*.h文件还是*.cpp文件,都是可以阅读的文本文件。要把它们翻译成可执行文件,主要经过三个步骤:预处理、编译和连接。预处理器的功能是阅读源程序,执行处理指令,嵌入指定源文件。预处理器生成新的临时文件,提供给编译器进行语法分析、语义分析,生成目标代码。最后,连接器连接标准库,生成可执行文件。返回页首目录第6章 数组、指针与字符串从程序员看,数组是相关数据对象集的一种组织形式。数组以线性关系组织对象,对应于数学的向量、矩阵的概念。数组结构是递归的,一个n维数组的每个元素是n-1维数组。数组元素以下标表示在它数组中的位置,称为下标变量。使用指针数组,可以管理复杂的对象,如字符串、函数以及类对象。从机器系统看,数组占有一片连续的存储空间。数组名表示这片存储空间的首地址。一旦声明一个数组,不带下标的数组名是一个常指针。可以用下标变量形式和指针形式访问已声明的内存空间。指针是C+语言中一种非常重要的机制。在程序执行中,数据对象都必须实际存储在计算机内存里。任一数据对象(在它能用的那段期间)都必然有一个确定的存储位置,占据着确定数目的存储单元。内存的组织方式就是顺序排列所有存储单元,每个单元有一个顺序编号,称为该单元的地址。存在内存上的数据最终都是根据其存储位置,通过存储单元的地址进行访问的。高级程序语言把存储单元、地址等低级概念用变量等高级概念掩盖起来,使我们在写程序时可以不必过多关心程序的实现细节,以便能把更多精力用到解决面临的问题方面。但是,计算机存储与地址等仍然是最基本的、最重要的概念。一个数据对象(在其存在期间)总有一个确定的固定地址,而存储地址本身也是用二进制编码表示的,这就使变量地址有可能作为程序中能够操作处理的一种数据。在硬件(机器语言)层面上,知道一个操作对象的地址,就可以实施对那个对象的操作。许多高级语言中也有地址的概念,它们提供一类特殊变量,实现通过地址访问程序中各种实体的操作。C+语言中的指针(Pointer)就是这样的一种机制,其主要目地是为了能更加灵活方便地进行对程序实体的各种操作。我们将地址数据称为地址值或指针值,以地址作为值的变量被称为指针变量,或简称指针。指针变量有两个主要操作:(1)用指针变量保存程序中某个对象的地址(使用“取变量地址一元运算符 &”),这种操作称为指针赋值。当一个指针变量保存着程序中某个变量的地址时,我们也说该指针“指向”了那个变量,对于其他情况,也采用类似的说法。(2)通过指针去访问被它指向的程序对象(例如:变量),这一操作称为间接访问。指针值也是一种数据。指针可以赋值,所以程序中的一个指针指向什么东西在程序执行过程中是可以改变的。在程序执行中的某个时刻,指针p可能是指向了变量x,在此后的另一时刻也可以指向变量y。这样,通过程序中同一个使用指针p的语句,在前一时刻间接访问的是变量x,在后一时刻访问的是变量y。指针变量带来灵活性的原因就在于此。C+的指针机制在各种语言中最灵活、功能最强大,而在另一方面,指针也是一种很低级的程序机制,是使用中最容易出错的机制。许多复杂C+程序中的错误都或多或少与指针有关。由于C+有功能强大的标准库,有了引用参数机制,程序中需要采用复杂指针操作的地方已经大大减少了。有了指针之后,我们又需要考虑指针与函数之间的关系。指针值(地址)也是一种值,自然可以传递给类型合适的函数参数,也可以作为函数的结果返回。然而,由于指针的特点,指针参数在函数中扮演着一类特殊的角色。假设有函数:int g(int *p, ) p *p 假设我们在调用函数时将一个指针值(例如,变量m的地址)传递给函数的指针形参p,那么p的值也就是m的地址,这样,在函数里就可以通过*p去间接访问m了。通过这种参数,在函数里可以间接访问函数调用环境中的变量,可以取值和赋值。C+函数有三种参数:传值参数、引用参数和指针参数。它们以不同的方式传递数据。现在我们有了两种通过参数修改调用处环境的方式:通过引用参数,以及通过指针参数并传递变量地址。那么,在需要做这种工作时,究竟应该选择哪种机制呢?可以说它们各有所长,是两种在相当程度上可以互相替代的机制。采用引用参数的优点是写程序简单:函数体内直接写参数名就表示被引用的变量,调用时也可以直接写变量名。这种方式的缺点同样来自这个方面:从函数的调用形式不易看出实际参数将被修改。用指针参数需要遵循一套规则:函数里全部用间接访问,调用时必须取地址。初学者会觉得很麻烦,也常常写错。此方式的优点就是调用处形式明显,容易看到实参可能被修改的情况。对于初学者而言,如果需要操作的对象是简单变量,采用引用参数的方式似乎更可行、更方便。请注意,指针参数的许多其它应用是无法由引用参数替代的。使用new和delete运算符能够动态地申请和回收(释放)内存空间。申请的存储空间同样可以用指针形式或下标形式访问。C语言没有字符串类型,但可以把字符指针作为“字符串变量”使用,实现对字符串的“名”访问。string类是C+预定义的类,它提供了对字符串更安全和方便的操作。返回页首目录第7章 继承与派生继承是面向对象程序设计实现软件重用的重要方法。用户可以在已有类的基础上定义新的数据成员和成员函数。原有类称为基类,新的类称为派生类,这种程序设计方法称为继承。一个操作的特殊实现,用继承方法增加新的类,不会影响原有的类层次结构。单继承的派生类只有一个基类。多继承的派生类有多个基类。派生类不能访问基类的私有(private)成员,但可以访问基类的公有(public)和保护(protected)成员。对基类成员的访问性质还受继承方式影响。在公有(public)继承方式中,基类的public和protected成员在派生类中性质不变;在保护(protected)继承方式中,基类的public和protected成员都成为派生类的protected成员;在私有(private)继承方式中,基类的public和protected成员都成为派生类的private成员。创建派生类对象时,派生类的构造函数总是先调用基类构造函数来初始化派生类中的基类成员。调用基类构造函数通过初始化列表实现。调用析构函数的次序和调用构造函数的次序相反。类继承关系中,出现成员访问的二义性,可以用作用域符显式指定类成员。为了避免多继承类在不同路径的公共基类,在派生类对象中产生不同副本,C+提供虚继承机制。多继承提供了软件重用的强大功能,也增加了程序的复杂性。返回页首目录第8章 多态性运算符重载的作用是令用户可以像基本数据类型一样,用简洁明确的运算符操作自定义的类对象。在程序设计中,运算符重载主要用于数学类模仿运算符的习惯用法。 C+语言中大部分预定义的运算符都可以被重载。重载运算符函数可以对运算符做出新的解释,定义用户所需要的各种操作,但重载后原有的基本语义,包括运算符的优先级、结合性和所需要的操作数的数目不变。运算符函数既可以重载为成员函数,也可以重载为友元函数或普通函数。当一元运算符的操作数,或者二元运算符的左操作数是该类的一个对象时,以成员函数重载;当一个运算符的操作需要修改类对象状态时,应该以成员函数重载。如果以友元函数重载,可以使用引用参数修改对象。当运算符的操作数(尤其是第一个操作数)希望有隐式转换,则重载运算符时必须用友元函数。虚函数和多态性使软件设计易于扩充。冠以关键字virtual的成员函数称为虚函数。派生类可以重载基类的虚函数,只要接口相同,函数的虚特性不变。如果通过对象名和点运算符方式调用虚函数,则调用关联在编译时由引用对象的类型确定,称为静态联编。基类指针可以指向派生类对象,基类中拥有虚函数,是支持多态性的前提。当通过类指针或引用使用虚函数时,C+在程序运行时根据所指对象类型在类层次中正确选择重定义的函数。这种运行时的晚期匹配称为动态联编。如果一个基类中包含虚函数,通常把它的析构函数声明为虚析构函数。这样,他的所有派生类析构函数也自动成为虚析构函数(即使它们与基类析构函数名字不相同)。虚析构函数使得用delete运算符删除对象时,系统可以正确地调用析构函数。纯虚函数是在声明时“初始化值”为0的虚函数。纯虚函数本身没有实现,由它的派生类定义实现版本。具有纯虚函数的类称为抽象类。抽象类只能作为基类,不能建立实例化对象。如果抽象类的派生类不提供纯虚函数的实现,则它依然是抽象类。定义了纯虚函数实现的派生类,即可以建立对象的类称为具体类。尽管不能建立抽象类对象,但抽象类机制提供了软件抽象和可扩展性的手段;抽象类指针使得派生类的具体类对象具有多态操作能力。返回页首目录第9章 群体类和群体数据的组织模板是C+类型参数化的多态工具。所谓类型参数化,是指一段程序可以处理在一定范围内各种类型的数据对象,这些数据对象呈现相同的逻辑结构。由于C+程序的主要构件是函数和类,所以C+提供了两种模板:函数模板和类模板。所有模板定义都以模板说明开始。模板说明以关键字template开始,以尖括号相括说明类属参数。每个类属参数之前冠以关键字typename或class。类属参数可以用于指定函数的参数类型、函数返回类型和声明函数中的变量。模板由编译器通过使用时的实际数据类型实例化,生成可执行代码。实例化的函数模板称为模板函数,实例化的类模板称为模板类。函数模板可以用多种方式重载。可以用不同类属参数重载函数模板,也可以用普通参数重载为一般函数。代码重用是现代程序设计追求的一个重要目标,模板有效地实现了软件重用,它是C+语言的一个重大特点。模板给C+增加了对通用对象和函数的支持,而这是传统的语言所缺少的面向对象的特点。函数模板给C+语言添加了许多灵活性, 而类模板扩展了C+类的灵活性。利用模板,程序员可以构造相关函数或类的系列,大大缩短了程序的长度,在某种程度上也增加了程序的灵活性。 在使用模板时,程序员不必关心所使用的每个对象的类型,而只要集中精力到程序的算法上面。返回页首目录第11章 流类库与输入输出C+流库是用继承方法建立起来的一个输入输出类库。流是对字节序列从一个对象移动到另一个对象的抽象。流对象是内存与文件(或字符串)之间数据传输的信道。标准流与系统预定义的外部设备连接;串流与串对象或字符数组

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论