您好,欢迎访问三七文档
绪论吴爱华ahwu@shmtu.edu.cn每周三下午13:00-15:00信工楼207C++程序设计-基本点回顾常量、变量、表达式三种基本程序结构(顺序、选择、循环)序列变量——数组复杂程序——函数调用和递归复杂变量——结构体数据存储和使用的本地化——文件面向过程编程思想程序有一个入口,一个出口给定一定的环境变量,执行过程是确定唯一的事情可以按顺序一步一步做一件复杂的事情可以分解为若干小事件,逐步实施面向过程的设计思想将复杂过程简单的按功能分层,从而解决问题。结构化:描述任何实体的操作的序列只需三种基本控制结构模块化设计:程序设计中各个过程体和组成部分用模块表示过程化设计方法:自顶向下,逐步细化面向数据流:数据和处理过程分离面向过程编程思想---带来的问题函数繁多,缺少组织执行步骤固定,不能适应任意的用户行为函数之间可以任意调用,函数的调用者不能对函数进行有效保护。从功能出发划分模块,所划分模块千差万别,可复用性不高面向对象属性:姓名;性别;身高;年龄;动作:说话;吃饭;。。。person属性:姓名:linlin性别:F身高:1.78体重:50动作:教课;吃饭;说话;Teacher属性:年龄:22性别:M学号:001籍贯:02动作:学习;吃饭;说话;Student面向对象思想任何复杂的系统都是由各种部件构建而成每一个部件是现实世界中的一种可以描述的对象,而对象是可以归类的。每一类对象有自己的属性和行为这些对象的行为协作,共同实现系统的功能面向对象的基本概念面向对象继承面向对象的基本概念—类和对象对象:任何一个现实世界存在的事物。可以有形(一辆汽车),也可以无形(一项计划)具有静态特征:可以用某种数据来描述(一组属性)动态特征:对象所表现的行为或具有的功能(一组行为)可以理解为带函数的结构体变量类:具有相同属性和行为的对象的模式描述属性:姓名性别身高体重动作:教课;吃饭;说话;Teacher属性:姓名:吴爱华性别:女身高:1.55体重:52动作:教课;吃饭;说话;吴爱华属性:CharsLength行为:intlength();boolempty();stringsubstr();intcompare();voidswap()“welcome”属性:‘w’8行为:intlength();boolempty();stringsubstr();intcompare();voidswap()String类把对象的全部属性和全部服务封装在一起,形成一个不可分割的独立单位(即对象)。信息隐蔽对象的外部不能直接地存取对象的属性,只能通过几个允许外部使用的服务与对象发生联系。对象间通过发送消息进行交互.接受消息的对象发送消息的对象发送消息服务器客户面向对象的基本概念—封装Voidmain(){strings1;s1.length=12;}Voidmain(){strings1;intx=s1.length();}属性:privateCharsprivateLength行为:publicintlength();boolempty();stringsubstr();intcompare();voidswap()面向对象的基本概念:类的继承面向对象的基本概念:多态性在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义。属性:privateCharsprivateLength行为:string&append(constchar*s,intn);string&append(conststring&s,intpos,intn);string&append(intn,charc);string&append(conststring&s);1.把串s的前n个字符连接到当前字符串尾2.把串s中从pos开始的n个字符连接到当前字符串的结尾3.在当前字符串结尾添加n个字符c4.把字符串s连接到当前字符串的结尾问题:输入圆的半径,求圆的周长和面积数据描述:半径,周长,面积均用实型数表示数据处理:输入半径r;计算周长=2*π*r;计算面积=pi*r2;输出半径,周长,面积;结构化编程的方法一个简单的C++程序用面向对象方法编程分析“圆”是抽象的类类型建立具体的圆(对象)半径?圆的周长?圆的面积?实例化问题:输入圆的半径,求圆的周长和面积用面向对象方法编程,求圆的周长和面积分析圆类数据成员半径成员函数置半径值求圆的半径求周长求面积实例化黑子走记录黑子棋面判断输赢白子走记录白子棋面判断输赢棋子棋盘规则如果需要悔棋功能呢?棋子.setPos棋盘.PosChange面向对象vs面向过程设计面向过程面向对象程序执行步骤通常按顺序执行在对象内执行独立其他对象数据项变量;独立;位于程序中属性;属于一个对象;随对象而变,具有某种行为激活方式调用函数发消息给对象数据与函数保持分离结合成对象事件发生函数执行时方法执行时活动涉及函数和参数对象,消息和参数学习目标掌握面向对象的思想,并能熟练应用掌握类的设计、应用,以及对象的使用掌握运算符重载技术掌握继承及多态性的程序设计技术掌握文件读写操作能够熟练地编写较复杂的C++程序初步接触MFC编程课程安排绪论(1学时)前半部分难点复习(3学时)第10章类和对象(6学时)第11章静态、友元(3学时)第12章继承和派生(4学时)第13章多态(4学时)第14章输入输出流(4学时)第15章模板(3学时)第16章标准模板库(2学时)第17章String类(3学时)第18章异常处理(1学时)学时安排:上课36学时,上机18学时考核与评分理论平时作业(包括实验报告)10%点名10%课堂表现10%期末考试成绩70%上机考勤10%理论课期末考试成绩15%课堂表现15%实验报告及实验结果60%参考书推荐TheC++ProgrammingLanguage(SpecialEdition)BjarneStroustrup《C++程序设计语言(特别版)》裘宗燕译机械工业出版社ThinkinginC++(2ndEdition)BruceEckel《C++编程思想》机械工业出版社刘宗田等译EffectiveC++ScottMeyers侯捷译MoreEffectiveCC++Primer《C++语言的设计与演化》BjarneStroustrup著机械工业出版社基础知识复习引用和函数参数传递方式函数重载内联函数变量的作用域和可见性Const修饰符引用引用(&)是存储空间的别名,一般形式:type&name=变量/对象;或type&name(变量/对象);例如:inti,j;int&ri=i;j=10;ri=j;//相当于i=j;声明一个引用时,必须同时对它进行初始化,使它指向一个已存在且已经初始化的对象。引用本身不占内存。一旦一个引用被初始化后,就不能改为指向其它对象。当引用指向的对象的数据类型和引用的数据类型不一致时,编译器会建立一个和引用同类型的临时变量,使得引用指向这个临时变量不能说明:指向引用的指针、数组名的引用、指向NULL的引用可以说明对指针的引用、引用的引用inta=10;int*p=&a;int&r1=a;int&r2=*p;1)r1和p的区别是什么?2)r1和r2有什么区别?3)哪些的值可以发生改变?Intb=20;P=&b;之后r1,r2各为多少?引用和指针的区别引用只能在定义时被初始化一次,之后不可变;指针可变;引用不能为空,指针可以为空;指针是一个实体,而引用仅是个别名;程序为指针变量分配内存区域,而引用不分配内存区域在编译中,指针:符号表上记录的是指针变量的地址,引用:符号表上记录的是引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。分析下列程序的执行的结果#includeiostream.hVoidmain(){intnum=500;int&ref=num;coutref;ref=ref+100;cout“”num;num=num+50;cout“”ref;}500600650分析下列程序#includeiostream.hVoidmain(){constfloatnum=45.5;float&x=num;float&y=x;++x;cout“x=”x“,num=”num“,y=”yendl;++x;++y;cout“x=”x“,num=”num“,y=”yendl;}x=46.5,num=45.5,y=46.5x=48.5,num=45.5,y=48.5函数参数的传递传值实参可以是常量、变量或表达式。在函数被调用时才分配形参的存储单元。传递时是传递参数值,即单向传递。传地址:本质上仍然是传值实参是指针在函数被调用时分配形参的存储单元执行时将实参的指针传给形参传引用实参是变量,形参是引用函数调用时不给形参分配存储空间,更高效被调用函数可以修改实参的值,不安全例3-11输入两个整数交换后输出#includeiostreamusingnamespacestd;voidSwap(inta,intb);intmain(){intx(5),y(10);coutx=xy=yendl;Swap(x,y);coutx=xy=yendl;return0;}voidSwap(inta,intb){intt;t=a;a=b;b=t;}运行结果:x=5y=10x=5y=105a10b调用t在swap中5510调用结束后…运行结果:x=5y=10x=10y=5xy105#includeiostreamusingnamespacestd;voidSwap(int&a,int&b);intmain(){intx(5),y(10);coutx=xy=yendl;Swap(x,y);coutx=xy=yendl;return0;}voidSwap(int&a,int&b){intt;t=a;a=b;b=t;}运行结果:x=5y=10x=10y=5引用传递5x10yab调用t在swap中5510调用结束后…运行结果:x=5y=10x=10y=5#includeiostreamusingnamespacestd;voidSwap(int*a,int*b);intmain(){intx(5),y(10);int*xx=&x;int*yy=&y;coutx=xy=yendl;Swap(xx,yy);coutx=xy=yendl;return0;}voidSwap(int*a,int*b){intt;t=*a;*a=*b;*b=t;}指针传递01hxx05hyyab调用t在swap中05h1001h调用结束后…运行结果:x=5y=10x=10y=501h05h5510x5y比较下列程序,分析其运行结果voidinct1(intx){x++;}voidinct2(int&x){x++;}main(){main(){inta=3;inta=3;inct1(a);int&i=a;coutaendl;inct2(i);inct1(a);coutaendl;coutaendl;inct2(i);}coutaendl;}返回引用函数运行的结果是引用int&get(int*a,inti){return*(a+i);}voidmain(){intarray[4]={1,2,3,4};inti=0;i=get(array,2);coutiendl;}引用作为返回值,必须遵守以下规则:不能返回
本文标题:6面向对象程序设计
链接地址:https://www.777doc.com/doc-3351888 .html