1、成绩评定方式:期末闭卷考试:70%平时成绩:30%平时成绩的组成:22 分 ,扣分项目,上课或实验缺席 1 次 3 分,迟到 1 分,不交作业 1 次扣 3 分,不做课内实验,不提交课内实验报告扣 12 分,严禁抄袭,发现扣 12 分8 分,加分项目,完成老师布置的课后实验或用 C+独立完成有一定规模的程序12 大体和 C 的内容差不多,比较简单,主要是复习。1,2 章 C+ 简介 C+基础1 入门1.1 程序的开发过程 阶段? 编程工具? 复习:小和尚程序?求 pi, pi=16arctan(1/5)-4arctan(1/239),arctan(x)=x-x3/3+x5/5-x7/7+1.2
2、 简单程序的 C 和 C+的比较1. first: hello worldfirst C+first CCan you see the meaning of every word? What do you think the difference of C and C plus? 2. a example of C plus with classBasketballPlayer.cppDo you know the program?From the example, do you think the C+ is better than C? Try performing the aim by
3、C?用结构化的方法,BasketballPlayer。推荐开发工具,学习方法和参考资料网络,电子书,看程序,写程序,msdn,论坛初级:C+语言程序设计教程 DeitelC+程序设计语言 Stroustrup中级:C+编程思想 EckelC+语言设计与演化 Stroustrup数据结构、算法与应用:C+语言描述 Sahni高级:C+核心:软件工程方法 Shtern大型 C+软件设计 Lakos作业:第一章课后作业,阅读第一章预习第二章2 C +中的 C2.1 C+的产生orient procedure , orient objectwho founded the C +? Bjarne Str
4、oustrup2.2 部分语法元素c+2.ppt 1. 关键字 2. 标示符:变量,对象,函数,类的名字 ,注意命名标示符规则3. 基本数据类型:注意各个数据类型的表示范围CharType.cppWhat result of the program? Why?4. 常量整型:十进制,八进制,十六进制实型:一般形式,指数形式(科学计数) ,后缀字符型:单引号 A, int b(5);注意:使用之前必须声明6. 符号常量给常量取个名字。Why? The aim?How? Const float pi=3.14;注意:在声明时一定要赋初值7. 运算符与算术表达式参考 PPTa) 算术b) 赋值c)
5、逗号d) 逻辑e) 条件:唯一的三元运算符 (ab):a,b;f) sizeof: 用于计算某种类型的对象在内存中的字节数g) 位:与 或 异或 移位 取反注意:运算符的优先级8. 表达式中数据类型的转换隐含转换:降低的转成高的显示转换:方法 int(a) , (int)a ;2.3 C+ 中的输入输出方法 cout cincouta; cinab;简单的格式控制 ends endl “n”输出十六进制?hex oct dec设置精度?宽度? Setprecision setw注意:头文件 iomanip2.4 程序结构顺序 选择 循环程序流程图? 符号 作用1. 选择结构IsLeap.cpp
6、Switch.cppWhat function of switch? Trying modify the program, make it run more times.Write a program to decide your body? Height weight2. 循环结构while for do-while while SumofN.cppInversNumber.cppCan you solve the problem with while word?DoWhileSum.cpp For Factors.cppOutputFig.cppStaNumber.cpp3. 其他有用的控
7、制语句 break continue goto 2.5 自定义数据类型1. typedef:用于将已有的类型取个新的名字。What?How : typedef int natural; natural i1,i2;2. 枚举 enumwhat: 将需要的变量值一一列出来,枚举变量只能取列表中的值how:enum weekday sun,mon,tue,wed,thu,fri,sat;enum.cppConclusion it is a list of some related constsAttention: type trans must be do when give a enum var
8、iant to a int variant 3. 结构体what: combing different data type to a entry.How:Sturct.cppWeight.cppModify the program to evaluate your body after class?4. 联合体what:same as struct, but diffenrence ? share same space.How:Union.cpp作业:练习题:3 大体和 C 的内容差不多,主要是复习,同时强调 C+中不一样的地方。3 章 函数what function? What aim?Ca
9、n you give a example with function?3.1 有关函数的术语定义声明调用npower.cppcan you see every part of a function?Do you think what should be cared when define and use a function?3.2 函数举例和函数的作用BittoDec.cppDo you think functions is useful?calculatepi.cppWhat feel do you with this?Algorithm is more important than la
10、nguage?Some techniques in practice?Symm.cppMathformula.cppCan you tell me the mean of using function?Decompose a big problem into several little modulesImprove the readability of programsMaking complexity to simplenessWrite a function to evaluate your body after class?Game.cppAfter class:写一个和计算机玩石头
11、剪刀 布的程序。统计 100 局的胜负比例?Conclusion:Functions is very very very important, it is the base of large programs!But how to design some functions to solve a problem is not a simple work, it need your experiments and techniques, so you should practice more!3.3 函数的嵌套和递归调用1. 函数调用的执行过程调用返回2. 嵌套调用函数中又调用其他函数3_7.c
12、pp3. 递归调用函数中又调用自己why? 现实中有些问题具有递归性,用递归调用解决非常简单明。Fac.cpp注意:递归函数中必须要有退出的条件comm.cpphow fell with recursion?The ability of analyze is more important than language?Conclusion:Recursion is a very power tool for some problems.习题After class:Read Hanoi.cpp 汉诺塔问题3.4 函数的参数传递1. 有关参数的术语Swape.cpp 形参 实参不改变实参的调用,传值
13、调用Swape.cpp改变实参的调用,传地址调用引用:变量的别名what? 参数传递how? Int Swapref.cpp注意:使用引用时应注意的问题:初始化引用不能改为指向其他对象after class:If no ref, how to imply the address call? Write a program?How feel to ref?Conclusion:Ref is a good thing?3_13.cpp3.5 内联函数inline和普通函数的区别:编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销inline.cpp3.6 默认形参值what? To m
14、ore simple函数在声明时可以预先给出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先给出的默认形参值。C+3.PPT注意: 默认形参值必须从右向左顺序声明,并且在默认形参值的右面不能有非默认形参值的参数。 调用出现在函数体实现之前时,默认形参值必须在函数原形中给出;而当调用出现在函数体实现之后时,默认形参值需在函数实现时给出。Defultparameter.cppThinking: what should be careful to default parameter?3.7 函数重载在 C 中,两个函数可以有相同的名字吗?C+ 中,允许?Reload.cpp注意:编译器怎样
15、区别两个同名函数?重载的函数必须有去区别? 用什么来区别?形参的 数量 和 类型 thinking:what aim of reload function? To clear program?3.8 使用系统函数数学函数文件操作函数进程函数Sysfunction.cpp注意:需要包含对应的头文件帮助系统的作用作业:练习题:开始学习面向对象的内容,感受 C+中不同于 C 的性质4 是面向对象的内容,应重点学习4 章 类和对象4.1 面向对象的特点:将数据和行为集成在一起,以描述客观世界的自然方式去编程 BasketballPlayer.cpp面向对象的三大性质 封装:将抽象出的数据成员、代码成员
16、相结合,将它们视为一个整体。 继承:是 C+中支持层次分类的一种机制,允许程序员在保持原有类特性的基础上,进行更具体的说明。今后学习的重点,专门一章 多态:多态性是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为, 例 几何形状 绘图 多边形 椭圆今后学习的重点,专门一章4.2 类和对象定义 类:类是对逻辑上相关的函数与数据的封装,是对问题的抽象描述。类:类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分。 对象:类的对象是该类的某一特定实体,即 类类型的变量 。C+中的实现:How to
17、 define a class? Gram ?4.2.1 类的声明class 类名称public:公有成员(外部接口)private:私有成员protected:保护型成员; / 注意分号class Clock /时钟类的声明public: /外部接口,公有成员函数void SetTime(int NewH=0, int NewM=0, int NewS=0);void ShowTime();private:/私有数据成员int Hour,Minute,Second;类的成员:两种 数据成员: 函数成员:表现行为4.2.2 类成员的访问控制 公有:在关键字 public 后面声明,它们是类与外
18、部的接口,任何外部函数都可以访问公有类型数据和函数。 私有:在关键字 private 后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。 保护:与 private 类似,其差别表现在继承与派生时对派生类的影响不同,第七章具体讲。问题:如果没有指定访问类型呢? 默认是 private, how to prove?4.2.3 类的成员函数(类的实现)注意:类的成员函数的声明必须在类体之内类的成员函数的实现(定义)可以在类体之外,但要用类名来限定/时钟类成员函数的具体实现void Clock:SetTime(int NewH, int NewM, int NewS)Hour=NewH;
19、Minute=NewM;Second=NewS;Clock.cpp内联成员函数:how to make it inline?Inline void Clock:SetTime(int NewH, int NewM, int NewS)注意:在类体内部定义的成员函数是内联的4.2.4 类的对象对象:类的对象是该类的某一特定实体,即 类类型的变量 。How ?Clock myClock;How to get classs content? Must by object?myClock.ShowTime();Clock.cppBasketballPlayer.cppWho is class? Who
20、 is object?Who is data member? Who is method member?After class:Give more information of Player class?4.3 构造函数和解(析)函数4.3.1 构造函数question:初始化:int i(5); int j=8;Student st=“888”,”姚明”,”男”;How to init a object?aim:构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。注意: 在对象创建时由系统自动调用,而且是必须调用。 如果程序中未声明,则系统自动产生出一个默
21、认形式的构造函数,但如果申明了自定义的构造函数,系统将不会产生默认形式的构造函数 允许为内联函数、重载函数、带默认形参值的函数,通常声明为公有权限 名字特殊,函数返回值(无返回值)how to do:class Clockpublic:Clock (int NewH, int NewM, int NewS);/构造函数void SetTime(int NewH, int NewM, int NewS);void ShowTime();private:int Hour,Minute,Second;构造函数的实现:Clock:Clock(int NewH, int NewM, int NewS)H
22、our= NewH;Minute= NewM;Second= NewS;建立对象时构造函数的作用:void main()Clock c (0,0,0); /隐含调用构造函数,将初始值作为实参。c.ShowTime(); attention:Clock c; OK? Why?after class:1 modify palyer class to give a init name when define a player?2 can you prove the construct function indeed be called when a object is generated?Const
23、ructor.cpp4.3.2 拷贝构造函数aim:用一个已有的对象去初始化另外一个对象。Int j=9;Int i(j);特点: 名字,返回值 形参:同类对象的引用 如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成一个拷贝构造函数。这个构造函数执行的功能是:用作为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应数据成员。什么时候被调用? 当用类的一个对象去初始化该类的另一个对象时系统自动调用拷贝构造函数实现拷贝赋值。 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。 当函数的返回值是类对象时,系统自动调用拷贝构造函数。how to do:cla
24、ss Pointpublic:Point(int xx=0,int yy=0)X=xx; Y=yy;Point(Pointint GetX() return X;int GetY() return Y;private:int X,Y;Point:Point (PointY=p.Y;coutb;if (b0)int c; 类作用域类的成员在类的内部都是有效的。 文件作用域不在前述各个作用域中出现的声明,具有文件作用域,这样声明的标识符的作用域开始于声明点,结束于文件尾。 (全局变量)5.1.2 可见性程序运行到某一点,能够引用到的标识符,就是该处可见的标识符。Attention: 标识符应声明在
25、先,引用在后。 如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。 对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。 (强龙难压地头蛇)5_1.cpp5.2 生存期静态生存期 这种生存期与程序的运行期相同。 在文件作用域中声明的对象具有这种生存期。 (全局变量) 在函数内部声明静态生存期对象,要冠以关键字 static 。 (静态局部变量)动态生存期 块作用域中声明的,没有用 static 修是的对象是动态生存期的对象(普通的局部变量) 。 开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。5
26、_2.cpp对象的可见性和生存期和变量是一样的。5_3.cpp5.3 类的静态成员5.3.1 静态数据成员Question:如何来表示类所共有的数据?计数问题?评估身体的标准?Thinking:类和对象的关系,数据成员是如何来存放的?Define:描述类的所有对象共同特征的一个数据项,对该类的任何对象实例,它的值是相同的该类的所有对象维护该成员的同一个拷贝How:用关键字 static 声明必须在类外定义和初始化,用(:)来指明所属的类。5_4.cppAttention:静态数据成员的初始化?如何访问静态数据成员? 通过对象名,语意上不够直观。5.3.2 静态函数成员Question:可以不通
27、过对象名来访问静态数据成员吗?语意上更直观。如果没有创建对象呢?Thinking:Point:GetC( ); no, 对普通函数成员的调用必须通过对象名。Define:静态函数成员属于整个类的Characteristic:公有的静态函数成员,即可以通过对象名调用,也可以通过类名调用静态函数成员中只能直接访问类的静态成员,不可直接访问非静态成员 (why?)因为非静态成员必须属于某个对象,而通过类名访问时并没有指明具体的对象。class Apublic:static void f(A a);private:int x;void A:f(A a)cout 和” ”区别? 默认路径。 “ ”当前路
28、径。5.6.2 外部变量和外部函数Question:一个文件中定义的变量,可以被另外一个文件使用吗?这个功能有用吗?1. 外部变量Define:具有文件作用域的变量Characteristic:其他文件也可以使用How:/ 该文件用来说明外部变量和函数 C1.cppvoid cf1()extern i;i=20;fun();/ C2.cppint i=4;void fun()coutiendl;Attention:外部变量的定义在哪里?声明在哪里?Extern 的作用?如何将外部变量限制在本文件内使用 Static2. 外部函数Question:一个文件中定义的函数,可以被另外一个文件使用吗?
29、这个功能有用吗?How:C1.cpp C2.cppAttention:外部函数的定义在哪里?声明在哪里?Extern 的作用?可以省略吗?如何将外部函数限制在本文件内使用 Static5.6.3 名字空间Question:多个人都在写文件,它们命名的标识符(变量)有可能相同,会有什么样的结果?变量重定义。Aim:解决以上提出的问题。Define:只要名字空间不同,变量名字可以相同。Namespcace NsClass File;Void fun();NS:File obj;NS:Fun()Uing NS:File;Thinking:Using namespace std 的作用是什么?什么时候
30、需要自己定义名字空间?5.6.4 编译预处理Define:预处理指令有很多,作用也不相同,是在编译之前完成的 Characteristic and Attention:以#开头每条指令独占一行不用分号结束可以出现在程序的任何位置1. #include文件包含:将一个文件的内容完全放到被包含的文件当中。 想想它的作用?2. #define #undef定义宏(符号)删除宏3. 条件编译指令限定程序的某些内容在满足一定条件的情况下才参与编译。用途:调试?#if#endif#ifdef #endif#ifndef#endif4. defined 操作符不是指令,是个操作符defined(标识符)#i
31、f !defined(C1_H)#define C1_H#endif5. 预编译指令的作用#include 的作用?Question:程序中多次重复包含一个头文件,会遇到什么样的问题?重复定义?怎样解决?/ h1.h#ifndef H1#define H1int i;static int j;#endif/f1.h#include “h1.h“int add(int x,int y)i=10;return x+y;/f2.h#include “h1.h“int sub(int x,int y)j=9;return x-y;Multifile.cppEmploy.cpp作业:练习题:6 章 数组
32、 指针 字符串内容比较繁杂,但很多都是 C 的内容,主要讲 C+所特有的,有些 C 的内容要在课后复习6.1 数组define: 数组是具有一定顺序关系的若干对象的集合体,组成数组的对象称为该数组的元素。每个元素有 n 个下标的数组称为 n 维数组。Thinking: the function of array?6.1.1 声明和使用:声明:int b10;int a34;note: 下标是从零开始计数的使用:用数组名+下标访问数组中的每个元素6-1.cpp6.1.2 存储和初始化:存储:数组元素在内存中是顺序、连续存储的。Can you write a program to prove this point?Int a5; After class:Give the address of every element of the array?Int a34;初始化:在声明数组时给部分或全部元素赋初值。Int a3=1,1,1;Int a=1,1;Int a23=1,2,3;Int a23=1,2,3,4,5,6;Int a3=1,2,3,4,5,6;6.1.3 数组名作参数注意:使用数组名传递数据时,传递的是地址,意味着改变形参数组元素的值,实参数组元素的值也会改变6-2.cpp