c++学习要点+各章要点导读+课文精讲串讲文字材料.doc
《c++学习要点+各章要点导读+课文精讲串讲文字材料.doc》由会员分享,可在线阅读,更多相关《c++学习要点+各章要点导读+课文精讲串讲文字材料.doc(57页珍藏版)》请在三一办公上搜索。
1、c+学习要点1.传指针时,我们可以通过指针来修改它在外部所指向的内容。但如果要修改外部指针所指向的对象是不可能的。例如传递外部指针到函数内来分配空间,必须传递指针的指针或指针的引用。2.charcarry10=0;编译器会将其后所有的东西都置0;3.函数返回值为const时,返回的东西付给一个类型相同的标示后其不能为左值;4.constint*i;intconst*i;int*consti;前两个功能相同,说明I所指向的内容不变;最后一个说明指针指向的地址不变,但内容可变。5.类中的const成员函数。定义为在原型后加const。常量函数不能修改类中的任何属性。但有两种方法可以修改。a)(my
2、class*)this-member1=values;b)将一个成员定义成mutable即可被常量函数修改。6.类中的常量const类型的,不能在类中被用来定义数组。而enumONE=100;TWO=2;定义的ONE、TWO却可以。通常的enum定义的置分配问题:enumAL=9,Z;此时Z的值为10。7.用const定义的int可用来开辟数组,但const定义的常量数组中的元素,不能用来定义数组。8.用sizeof计算变量的空间,如果是数组,按实际空间返回;常量字符串(实际上是在静态内存区开辟的变量)sizeof返回比实际长度加一。如果是指针则不考虑它指向的空间大小,仅仅返回指针类型的大小。
3、如果用sizeof计算函数的行参,即使是属组也仅仅返回一个相关类型指针的大小。9.形如intiarray=12,124,433;编译器会自动给iarray分配3个元素的长度。元素长度的个数计算公式为sizeof(iarray)/sizeof(*iarray)。10.拷贝构造函数:当行参和实参结合时,如果是复杂对象的传值类型,则调用拷贝构造函数生成一个临时对象作为实参,退出函数时,临时对象被调用析构函数释放。当返回值是复杂对象是,也是调用拷贝构造函数来赋值。这就出现构造函数和析构函数被调用次数不相等的情况。拷贝构造函数的原型为A(A&),我们可在类中重载。(缺省的拷贝构造函数是使用位(bit)拷
4、贝方法:浅层拷贝,不拷贝指针指向的内容)。11.volatile类型的变量告诉编译器,本变量不需要进行代码优化。在多线程的应用中,我们如果读入一个变量到寄存器,此时时间片到期,去处理其他线程了,在重新获得处理机时,volatile类型告诉处理机,重新从变量读取数据到寄存器,而不是用寄存器数据直接处理,这样可以防止脏数据。12.class和struct在一定程度上有相同的功能,只不过前者缺省的成员是私有的,后者在缺省时成员为共有的。故而class不是c+必需的保留字13.c和c+编译器,对相同的函数名编译后生成的相同的标示不同,故而在引用c的库文件时必须使用extern“C”告诉编译器,它是c的
5、函数,按c的规则编译。通常我们使用的标准头文件已被处理过。14.#include“filename”;#include,前者先在当前目录下寻找文件,如果找不到再到系统规定的路径下找,后者直接到系统规定的路径下找。15.任何地方分配的静态变量(static),其生命周期和主进程相同。第二次定义一个已存在的static变量,对变量的内用无影响,但它的可见范围只在定义的范围内。(考研曾作错!)(从静态变量的特性不难理解,类中的static类型是所有对象共享的)16.内联函数(inline)在实现上实际和宏类似,在内联函数出现的地方将函数展开来避免函数调用时的出栈、如栈,提高效率。但内联函数的代价是:
6、代码增大。inline函数适合成员函数和自由函数。在类中实现的函数自动为内联函数。inline必须定义到函数的实现上,例如:inline intPlusOne(int)是无效的。友元函数在类的体内被实现自动变为内联函数。17.#include #defineDEBUG(X)cout#X=Xendl 其中的#X表示X被当作字符串输出。18.assert(0!=0); 如果assert中的条件为假,则运行期间回退出程序,且报告出错代码的行号。(#include )19.静态对象在main结束或exit()被调用时才调用自身的析构函数。这意味着,在对象的析构函数中调用exit()是很危险的,有可能进
7、入一个死循环中。调用abort()来退出函数,静态对象的析构函数并不会被调用。我们可以用atexit()来指定跳出main或调用exit时要执行的操作,用atexit注册的函数,可以在所有对象的析构函数之前调用。voidexit_fn2(void)printf(Exitfunction#2calledn);/处理函数atexit(exit_fn2);20.全局变量实际上用的是静态存储。静态变量的构造是在进入main之前调用的,在main结束时调用它的析构函数。变量的名字由小范围(c+而言):/*.cppinta;/静态变量,但为externinta;即它是全局的,外部可见的staticintb
8、;/静态变量,static和extern相反,只在*.cpp中有效,对其他单元(文件)是不可见的。函数的定义和上面相同。main()类的静态成员变量可以如下赋值:intX:s=23;(在*.cpp中,无论公私都可以)21.名字空间(namespace):定义一个名字空间,然后使用unsing就可以将当前的类型上下文转换名字空间所定地的.namespacemathenumsignpositive,negative;classintegerinti;signs;public:interger(intI=0):i(i)signSign().;/endclassintergerA,B,C;interg
9、erdivide(interger,interger);/no;voidq()usingnamespacemath;intergerA;/hidesmath:AA.Sign(negative);Math:A.Sign(positive);22.一般对于函数flaotf(inta,intb); 某些c+编译器编译后生成_f_int_int的名字,有些c编译器则生成_f的名字。故在c+中链接c的库函数时要用extern“C”告诉编译器,按c的规则来编译函数。类似的还有extern“C”#include “myhead.h”,c+还支持extern“C+”.23.在函数调用时,传引用也是将指针压栈。
10、24.构造函数、析构函数、赋值构造函数、重载的=,四者的调用顺序:(三种函数都已实现)a)Xx;Xa=x;result:X:constructX:copy_structb)Xx;Xa;a=x;Result:X:constructX:constructX:copy_struoperator=X:destruct如果没有赋值构造函数则结果:X:constructX:constructoperator=X:destruct(如果直接Xa=x;这不掉用一般的构造函数,调用复制构造函数)指向类的成员函数的指针:设intX:a(void)Xx;int(X:*pf)(void)=&X:a;(x.*pf)()
11、;指向成员变量的指针:设inti;是X的成员变量intX:*pm=&X:i;Xx; 各章要点导读第 1 章 绪论本章作为全书的开篇,旨在使读者初步了解面向对象的程序设计语言之由来,初步了解面向对象的程序设计思想之基本特点,概要性地了解面向对象的软件开发方法,为后续章节的学习奠定基础。为什么需要首先有一个初步和概要性的了解呢?一方面,这是为了在以后的学习中具体接触到每一个新的概念、语法时都能够清楚地认识到,它在面向对象的方法中、在C+语言中的地位和作用是什么。另一方面,是希望读者在一开始就能够认识到,面向对象的思想与人类所习惯的思维方式是一致的,虽然C+语言比起面向过程的语言(如C语言)来要复杂
12、许多,但是C+设计者的目的是为了使事情变得更简单,而不是故弄玄虚将事情搞得更复杂。事实上,正是由于C+语法的复杂性,使得它的表现能力更强,程序员用C+来写程序的时候能够更容易、更灵活地实现各种功能。读者在阅读本章1.1-1.3时会感觉很多问题理解不透,这是正常的。因为需要学完本教材的全部内容,才能对C+语言和面向对象的方法有一个全面的认识。而本章在一开始就给出了一个全面介绍,虽然尽量使用通俗的语言,但是肯定仍有一些问题是读者先现在不能完全理解的。对此读者不必深究,对1.1-1.3的内容阅读后有个大致的了解就行。1.4节介绍了信息的表示与存储,这是程序设计的基本知识,是必须掌握的基础。建议读者认
13、真学习、完全掌握。不过有些读者可能会觉得这些知识在编程中并没有直接使用,不学这一节好像也不影响学习编程。但是没有这些基础知识,会影响你对程序理解。当然,如果觉得枯燥,也可以先略过这一节,待以后遇到疑问时,再来学习。因此有的教师在讲课时也略过这一节,留给学生自学,我本人就是这样做的。1.5节简单介绍了程序的开发过程和一些术语,不必死记硬背,最好结合实验来体会。本章的主要实验任务是学会使用一种C+开发工具,本书的实验用的是VC+6.0开发环境。认真完成这一实验很重要,了解开发环境的基本功能,使完成以后各章实验的基础。第 2 章 C+简单程序设计本章内容是程序设计的基础,学习的目标是掌握C+语言的基
14、本概念和基本语句,能够编写简单的程序段。这是初学程序设计者遇到的第一个难点:将解决问题的步骤用C+语言描述清楚。理解本章的简单例题不难,但是自己编写第一个程序却有点难以下手。学习编写程序可以从修改例题程序开始,也就是在原有例题程序的基础上,尝试自己增加或改变一些功能,或者用不同的方法来解决问题。如果你使用VC+开发环境编译、运行简单程序还有困难,应该首先复习一下实验一。本章的例题都是一些比较简单的问题,但是这些简单的例题给出了一些常见问题的典型解决方法,既是做软件开发必须掌握的基本功也是各种考试中经常出现的题目,读者应该达到熟练掌握,并能够举一反三。例如:例2-3是典型的比较问题,例2-4是情
15、况分支,例2-5是累加问题,也可以用for语句实现,要注意累加和的初始值一般是0,例2-10是简单的统计问题。当你开始改编例题程序时,首先遇到的阻力就是编译时和运行时出现的错误。如果程序中存在语法错误,编译时编译器就会指出错误的位置和错误原因(请参考实验二)。不过遗憾的是,编译器给出的信息常常不是很精确,而且多数编译器给出的错误信息是英文的,这就给初学者带来一定的困难。有时候编译一个十几行的小程序,就会出现几十个语法错误,这时不必感到茫然,只要仔细查看程序,参照编译器给出的错误信息一一改正就行了(有时候改正了一个错误,另外几十个错误也就迎刃而解了)。如果看不懂编译器给出的错误信息,可以借助于编
16、译器的帮助功能,当然一开始还经常需要借助于英文字典。建议读者准备一个笔记本,记下遇到的每一条错误信息、中文意思、导致这一错误的真正原因、解决方法。这样做一开始似乎很麻烦,但是经过一段时间,你会感到受益匪浅。一旦你熟悉了一种编译器给出的错误信息,当你再换用别的编译器时会发现他们对错误的描述都是类似的,你很快就可以适应。这个办法是我上大学时我的老师教我的,我自己觉得很有效,我做老师以后,也这样告诉学生,但愿意这样做的学生很少,大家都嫌麻烦。结果呢,随着学习的深入,作业越来越难、程序越来越大,也就有越来越多的学生抱怨实验课时间不够用。究其原因,很大程度上是因为不熟悉错误信息,改正语法错误花了太多时间
17、。改正语法错误的能力是编程的基本功,也是相对比较简单的事情(毕竟编译器会直接指出错误)。较难以发现和改正的错误,是运行时的错误。也就是说,编译时没有语法错误,但是运行的结果却不对,这往往是因为你的算法(就是解决问题的方法)设计有问题。这样的错误是比较难以定位和改正的,查找这种错误的位置和原因叫做“程序调试”,调试程序的能力和经验需要在长期的编程实践中积累,大多数编译器都提供了辅助调试的功能(debug),实验二将引导你学会使用VC+6.0的debug功能。第 3 章 函数本章的主要目标是学会将一段功能相对独立的程序写成一个函数,为下一章学习类和对象打好必要的基础。掌握函数定义和调用的语法形式并
18、不难,但是要有效地应用函数,必须对函数调用的执行过程和参数的传递有深刻的认识,这也正是初学时的难点。要很好地理解函数的调用和参数传递,尤其是嵌套调用和递归调用的执行过程,比较有效方法是利用编译器的调试功能,跟踪函数调用的执行过程、观察参数和变量的值,实验三会引导你进行跟踪和观察。利用引用传递参数,是函数间数据共享的一个重要方法,但是一部分读者对引用类型的理解会有困难,其实只要简单地将引用理解为一个别名就可以了。在介绍函数的同时,本章也介绍了一些有用的算法。例3-6介绍了产生随机数序列的方法,例3-8、3-9、3-10介绍了递归算法。本章的例题程序与第2章相比显然复杂了一些,需要仔细阅读并上机调
19、试才能完全理解。对于较复杂的程序,书中都以注释的形式给出了详细说明,请读者在阅读程序的时候务必认真阅读注释文字。递归算法是一种非常简洁高效的算法,用途很广泛,但理解起来有一定的难度,自己编写递归程序更不是件容易的事。作为初学者,对此不必着急。学习是一个循序渐进的过程,本章介绍递归算法主要是为了说明C+语言允许函数的递归调用,如果要完全理解和熟练编写递归程序,还需要学习“数据结构”课程,一般的“数据结构”书中都会详细介绍递归算法及其应用。当然,喜欢钻研的读者不妨准备一张大纸,在利用调试功能跟踪递归程序的执行过程时,记录下递归过程中各个变量的值,会有助于对递归算法的理解。第 4 章 类与对象前面介
20、绍的只是一般程序设计的基础知识,从本章开始才真正接触到面向对象的程序设计。类是面向对象程序设计中最重要、最基本的概念,也是学习面向对象方法时遇到的第一个难点。类是对逻辑上相关的函数与数据的封装,是对问题的抽象描述。要理解类与对象必须结合实例来学习,读者一边读书可以一边思考:除了书中列出的例子,现实世界中还有哪些有形或无形的事务可以被抽象为程序中的类,每个类又存在哪些对象(实体)。这样对类的概念就会理解得快一些。在学习类成员的访问控制、构造函数、析构函数时,读者自然会有这样的疑问:这些语法有什么用呢?难道写个小程序也必须搞得这么麻烦吗?应该说C+是适合写大型程序的,C+语言的设计师Bjarne
21、Stroustup在C+语言的设计和演化一书中指出:“C+是作为一种系统编程语言、作为一种为开发由大的系统部件组成的应用而进行设计的”。因此,在初学者编写小型程序时很难看到C+的优越性。虽然我在书中尽量结合实例来讲,但限于本书定位于初学读者,例题不可能很复杂、庞大,所以读者总感到例题只是验证性的,有点牵强。从学习这一章开始,学生就会经常问我,语法为什么是这样、规定为什么这么多?进而将语法规定作为讨厌的东西,在内心抵触。我在书中已经谈了很多关于C+和面向对象方法的特点、用途,但在编写小程序时很难看到面向对象方法的优点。对于初学者来说,我建议换一种思维方式,如果目前还看不到某些语法规定的意义,先不
22、要钻牛角尖。比如构造函数、拷贝构造函数和析构函数,在本章的例题中,还体现不出它们的用途,那就先不理会它们,待以后用到的时候,再去体会其中的妙处,这一章里,就先了解一下这些语法规定。这样想,学习的时候心情是否会轻松些呢?从这一章开始每章的最后一节都是一个实例人员信息管理系统,这个例子贯穿后续各章节,利用每章介绍的知识不断丰富程序的功能,建议读者仔细阅读、体会,并尝试修改、补充程序的功能。本章中还介绍了利用UML语言表示类与对象的方法,以后各章还将进一步介绍用UML语言表示类之间的关系,但这远不是UML语言的全部,这方面的内容也不是初学时的重点,读者可以不必深究,了解一下就可以了。如果有需要,可以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 学习 要点 各章 导读 课文 串讲 文字 材料

链接地址:https://www.31ppt.com/p-4121283.html