程序设计刘振安_第1页
程序设计刘振安_第2页
程序设计刘振安_第3页
程序设计刘振安_第4页
程序设计刘振安_第5页
已阅读5页,还剩353页未读 继续免费阅读

下载本文档

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

文档简介

1(优选)程序设计刘振安当前1页,总共358页。2需要了解的C语言知识C语言基本语法Ifelse语句For语句While语句数组定义函数定义指针结构体运算符当前2页,总共358页。3第一章认识C++的对象本节要点:C与C++的关系(领会)掌握函数原型和命名空间的使用方法(综合应用)对象和预处理基本概念(领会)掌握C++程序的基本结构(综合应用)1.1初识C++的函数和对象当前3页,总共358页。4第一章认识C++的对象1.1初识C++的函数和对象C语言回顾intx;该语句在C语言和C++中均可使用,x在C语言中称为变量,在C++中称为对象。C语言与C++的不同点:称呼不同当前4页,总共358页。5第一章认识C++的对象1.1初识C++的函数和对象C语言回顾结构体的定义structpoint{floatx;

floaty;};表示定义一种点数据类型,包含坐标x,y.定义完成后,point成为一种类型,使用方式类似int类型如:定义p1变量为点类型,写作:structpointp1;或pointp1;定义x变量为整型:intx;当前5页,总共358页。6第一章认识C++的对象1.1初识C++的函数和对象C语言回顾结构体的定义structstudent{intnum;charname[10];

floatgrade;};若定义一种结构体记录学生信息包含学号,姓名,成绩,如何定义?定义s1变量为学生类型,写作:structstudents1;当前6页,总共358页。7第一章认识C++的对象1.1初识C++的函数和对象例1.1输入一个点的信息,求该点到原点的距离预处理命令,使用命名空间,声明函数,声明常量,定义结构体,主函数main求距离函数result当前7页,总共358页。8例1.1当前8页,总共358页。9例1.1主函数当前9页,总共358页。10例1.1当前10页,总共358页。11第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:1,混合型语言C语言程序包含main函数面向对象语言没有main函数C++是混合型语言当前11页,总共358页。12第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:2,注释方式/*。。。。*///。。。。当前12页,总共358页。13第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:3,输入输出流cin和cout是C++语言中进行输入输出操作的函数。其定义在isstream头文件中。类似:C语言中printf函数scanf函数putchar函数getchar函数,使用时要包含“stdio.h”当前13页,总共358页。14第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:3,输入输出流cin和cout函数的简单使用cout<<后加要输出的内容,可以是对象或字符串,行末加分号,可用多个<<来分隔多个输出对象,<<endl;表示输出后换行。cout<<endl;等价于cout<<“\n”;当前14页,总共358页。15第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:3,输入输出流cin和cout函数的简单使用cin>>后加存放数据的对象,即变量,行末加分号,可用多个>>来分隔多个输入对象。cin>>x>>y;等价于cin>>x;cin>>y;当前15页,总共358页。16第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:4,使用命名空间是C++语言中封装程序库名称的一种机制记忆:C++标准类库中的对象和函数都属于std命名空间使用这些对象和函数时要usingnamespacestd当前16页,总共358页。17第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:4,使用命名空间使用std命名空间时注意:使用C语言中的头文件时,要写成“xxx.h”形式使用C++中的头文件则不能加上“.h”当前17页,总共358页。18第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:5,对象定义及初始化intx;x=0;等价于intx=0;C语言intx(0);C++语言等价于上两条语句。此种初始化语法在C++中称为构造函数语法当前18页,总共358页。19第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:6,函数原型及其返回值函数要有类型,若要得到处理结果则要使用return语句。当前19页,总共358页。20第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:6,函数原型及其返回值函数原型声明函数调用在函数定义之前时要对函数进行声明当前20页,总共358页。21当前21页,总共358页。22第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:7,const修饰符和预处理程序常量定义:#definePI3.1415(c语言)在变量定义之前加上const关键字,表示定义的变量值不可改变。constintPI=3.1415;constintPI(3.1415);当前22页,总共358页。23第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:7,const修饰符和预处理程序常量定义:#definePI3.1415#define命令的特点:原样替换掉程序中出现的预定义宏名符号如:#defineBUFFER100若程序出现:x=BUFFER/3;x=?尽量选择const定义常量当前23页,总共358页。24第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:7,const修饰符和预处理程序const关键字的特点:利用const定义常量时必须给出常量的值,除非该常量是extern的。如:constintd;

externconst;作业:1,extern变量是什么样的变量?当前24页,总共358页。25第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:7,const修饰符和预处理程序C++预处理命令以#开始,分为宏定义,文件包含和条件编译作业:2,写出C语言中预处理命令有哪些,举例说明每个命令含义及作用。3,写出C语言和C++语言中#include命令的不同处当前25页,总共358页。26第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:8,程序运行结果当前26页,总共358页。27第一章认识C++的对象1.1初识C++的函数和对象对程序的说明:9,程序书写规则注意缩进对齐,使程序清晰明了当前27页,总共358页。281.2认识C++语言面向过程编程的特点本节要点:函数重载(领会)掌握C++的新数据类型(简单应用)动态分配内存(综合应用)熟练掌握引用的使用方法(综合应用)了解对指针使用const限定符的目的,方法(识记)了解泛型算法应用于普通数组的方法(识记)掌握数据的简单输入输出(简单应用)当前28页,总共358页。29第一章认识C++的对象1.2认识C++语言面向过程编程的特点本节要点:1.2.1函数重载(领会)C++允许一个函数定义多个版本。使得一个函数完成多种功能。即:同一个函数名定义多次。当前29页,总共358页。301.2.1函数重载(领会)重载函数max的调用形式:当前30页,总共358页。311.2.1函数重载(领会)重载函数max的定义形式:当前31页,总共358页。321.2.1函数重载(领会)重载函数max的声明形式:可否不声明??重载函数的要点:函数名相同,参数个数不同,参数类型不同当前32页,总共358页。331.2.2C++的新数据类型(简单应用)1,void类型void表示无类型,或空类型。不能声明变量,只能声明函数返回值。表示函数无返回值。当前33页,总共358页。342,bool型(逻辑型,布尔型)占1个字节。表示逻辑运算中的”真”

”假”3,整型(intlongshort)int、short至少16位long至少32位short不得比int长int不得比long长当前34页,总共358页。354,char型(字符型)占1个字节。5,实型(float/double/longdouble)当前35页,总共358页。365,&取地址符intx;&x表示????什么样的变量可以存放&x?????int*p;p是指针变量,指针变量能存放变量的地址。P=&x;当前36页,总共358页。376,常量表示整型:0前缀表示8进制数,0x前缀表示16进制加L、l后缀表示长整型常量实型:F、f后缀表示浮点型常量(float)实数加L、l后缀表示longdouble型无前缀,无后缀的为double型当前37页,总共358页。386,常量表示0L123l0550x50xaf017,转义字符‘\101’‘\t’‘\r’‘\n’‘\0’‘\x41’当前38页,总共358页。391.2.3动态分配内存(综合应用)new动态分配内存一般格式:指针变量=new类型[size];new运算符得到新分配空间的首地址,赋值给指针变量后,可根据指针变量的加减运算来使用这些空间。delete释放内存使用完毕后要释放内存deletep;pP+3P+1当前39页,总共358页。401.2.4引用的使用方法(综合应用)C++中新的表示形式。引用即使用变量的别名。定义形式:数据类型&别名=对象名;作用:别名与对象名对应同一个对象,共用同一段内存。对别名的修改会造成原对象的修改。例如:intx;int&a=x;表示a是变量x的别名。一旦定义别名后则a和x完全等价。当前40页,总共358页。411.2.4引用的使用方法(综合应用)C++中新的表示形式。引用即使用变量的别名。定义形式:数据类型&别名=对象名;作用:别名与对象名对应同一个对象,共用同一段内存。对别名的修改会造成原对象的修改。例如:intx;int&a=x;表示a是变量x的别名。一旦定义别名后则a和x完全等价。当前41页,总共358页。421.2.4引用的使用方法(综合应用)C++中新的表示形式。引用即使用变量的别名。定义形式:数据类型&别名=对象名;当前42页,总共358页。43使用引用时注意:1,不能定义引用的引用int&&r=x;2,不能直接定义数据组的引用当前43页,总共358页。441.2.4引用的使用方法(综合应用)一般格式:typedef类型类型别名使用typedef定义某类型别名后,可使用该别名来定义相关对象。例如:typedeflongintlint;则longinti;等价于linti;用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头当前44页,总共358页。45引用数组名作参数一般格式:typedef类型类型别名使用typedef定义某类型别名后,可使用该别名来定义相关对象。例如:typedeflongintlint;则longinti;等价于linti;当前45页,总共358页。46Typedef使用说明typedef用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头等价于当前46页,总共358页。471.2.5对指针使用const限定符(识记)1,左值和右值表达式:E1=E2

E1是左值,是可被修改的int*p,x=1;*p=2;&p表示什么?当前47页,总共358页。481.2.5对指针使用const限定符(识记)2,指向常量的指针const常量定义,表示const后的表达式不可改变,定义时必须给出表达式的值。intx=11;constint*P;constint*P=&x;表示*P是不可改变的。*P不能在=左侧。P=&y;x=12;当前48页,总共358页。491.2.5对指针使用const限定符(识记)3,常量指针const常量定义,表示const后的表达式不可改变,定义时必须给出表达式的值。intx=11;int*constP;错!必须初始化int*constP=&x;表示P是不可改变的。P不能在=左侧。*p可改变。当前49页,总共358页。501.2.5对指针使用const限定符(识记)4,指向常量的常量指针const常量定义,表示const后的表达式不可改变,定义时必须给出表达式的值。intx=11;constint*constP=&x;表示P是不可改变的。*p不可改变。当前50页,总共358页。511.2.6泛型算法应用于普通数组(识记)掌握数据的简单输入输出(简单应用)泛型算法是C++标准模板库(StandardTemplateLibrary)提供的一组操作。利用这些操作可以简化数组操作。要使用这些操作必须包含头文件<algorithm>当前51页,总共358页。521.2.6泛型算法应用于普通数组(识记)假定a,b是两个数组名,其长度为len操作示例:1,reverse(a,a+len)将数组a中的元素顺序反转。(逆向)2,copy(a,a+len,b)将a数组的内容原样复制给b数组reverse_copy(a,a+len,b)将a数组的内容反转后复制给b数组当前52页,总共358页。531.2.6泛型算法应用于普通数组(识记)假定a,b是两个数组名,其长度为len操作示例:3,sort(a,a+len)将数组a中的元素按升序排序4,sort(a,a+len,greater<type>())将数组a中的元素按降序排序当前53页,总共358页。541.2.6泛型算法应用于普通数组(识记)假定a,b是两个数组名,其长度为len操作示例:5,find(a,a+len,value)在数组a中查找值为value的元素,并返回位置指针当前54页,总共358页。551.2.6泛型算法应用于普通数组(识记)假定a,b是两个数组名,其长度为len操作示例:6,输出数组中的内容Copy(a,a+len,Ostream_iterator<type>(cout,”字符串”))Ostream_iterator表示输出流操作符<type>:表示要输出的数组类型Cout表示流输出操作“字符串”:表示分隔字符串当前55页,总共358页。56第一章认识C++的对象1.2认识C++语言面向过程编程的特点本节要点:1.2.7数据的简单输入输出(简单应用)当前56页,总共358页。57第一章认识C++的对象1.3程序的编辑、编译、运行当前57页,总共358页。58第一章认识C++的对象课后题:P26三、改错题写作业本上当前58页,总共358页。59第二章从结构到类的演变2.1结构的演化2.1.1结构发生质的演变1.函数与数据共存C++允许结构中定义函数,成为成员函数在结构中同时定义成员变量与成员函数使用格式:结构对象.成员变量结构对象.成员函数当前59页,总共358页。60第二章从结构到类的演变1.函数与数据共存—结构的定义structpoint{doublex,y;voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};当前60页,总共358页。61第二章从结构到类的演变1.函数与数据共存—结构的定义structpoint{doublex,y;voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};数据成员成员函数当前61页,总共358页。62第二章从结构到类的演变1.函数与数据共存—结构的定义当前62页,总共358页。63第二章从结构到类的演变运行结果当前63页,总共358页。64第二章从结构到类的演变主函数当前64页,总共358页。65完整程序当前65页,总共358页。66修改后的程序当前66页,总共358页。67第二章从结构到类的演变2封装若定义结构体时,使用了private关键字,则产生封装性当前67页,总共358页。68使用了private关键字,则产生封装性当前68页,总共358页。69第二章从结构到类的演变2封装在定义结构时,若使用了private则产生封装性,表示成员为私有的,只能在结构体内部通过公有成员函数使用。若未添加private则表示默认为public。类定义时默认为private。当前69页,总共358页。70第二章从结构到类的演变2.1.2使用构造函数初始化结构的对象在定义结构时,与结构同名的函数称为构造函数。若定义的函数与某个已定义函数重名而参数类型或个数不同,则称为函数重载。当前70页,总共358页。712.1.2使用构造函数初始化结构的对象问题:那个函数是构造函数?那个函数被重载了?结构体的定义当前71页,总共358页。722.1.2使用构造函数初始化结构的对象注:构造函数在定义结构体对象时自动执行,并根据是否初始化来自动选择所调用的构造函数当前72页,总共358页。732.1.2使用构造函数初始化结构的对象调用无参构造函数调用有参构造函数为xy设置值显示p1,p2的xy值当前73页,总共358页。742.1.2使用构造函数初始化结构的对象当前74页,总共358页。75第二章从结构到类的演变2.2从结构演化成一个简单的类将程序中struct替换为class即变为类的标准定义形式当前75页,总共358页。76第二章从结构到类的演变2.2从结构演化成一个简单的类产生类对象p1,p2为对象的属性赋值显示对象属性值当前76页,总共358页。77第二章从结构到类的演变2.2从结构演化成一个简单的类类图的表示类名类属性/成员变量类操作/成员函数当前77页,总共358页。78第二章从结构到类的演变2.3面向过程和面向对象简单了解对象的含义当前78页,总共358页。79第二章从结构到类的演变2.3面向过程和面向对象简单了解对象的含义当前79页,总共358页。80第二章从结构到类的演变2.3面向过程和面向对象简单了解对象的含义当前80页,总共358页。81第二章从结构到类的演变面向过程的求解步骤给出三角形三个顶点坐标,计算三边长,并输出步骤:输入x1,y1,x2,y2,x3,y3六个数据计算(x1,y1)和(x2,y2)距离计算(x1,y1)和(x3,y3)距离计算(x2,y2)和(x3,y3)距离输出三个距离当前81页,总共358页。82第二章从结构到类的演变面向对象的求解步骤给出三角形三个顶点坐标,计算三边长,并输出设计类将点设计为一个类,并提供相关的属性和操作当前82页,总共358页。83第二章从结构到类的演变面向对象的求解步骤给出三角形三个顶点坐标,计算三边长,并输出定义对象同时给出坐标pointA(x1,y1)pointB(x2,y2)pointC(x3,y3)当前83页,总共358页。84第二章从结构到类的演变面向对象的求解步骤给出三角形三个顶点坐标,计算三边长,并输出定义对象,然后获取坐标pointA;pointB;pointC;A.Getx();A.Gety();B.Getx();B.Gety();C.Getx();C.Gety();当前84页,总共358页。85第二章从结构到类的演变面向对象的求解步骤给出三角形三个顶点坐标,计算三边长,并输出计算距离并输出AB=A.GetLength(B);AC=A.GetLength(C);BC=B.GetLength(C);当前85页,总共358页。86第二章从结构到类的演变2.4C++面向对象程序设计特点2.4.1对象三要素:对象名,属性,操作当前86页,总共358页。87第二章从结构到类的演变2.4C++面向对象程序设计特点2.4.1对象三要素:对象名,属性,操作当前87页,总共358页。88第二章从结构到类的演变2.5使用类和对象2.5.1使用string对象类名类的属性用于存放字符串类的操作/方法/成员函数当前88页,总共358页。89第二章从结构到类的演变2.5使用类和对象2.5.1使用string对象该类是C++语言中的内部预定义类,要在程序中使用该类时必须添加头文件#inculude<string>当前89页,总共358页。90第二章从结构到类的演变2.5使用类和对象2.5.1使用string对象类的初始化:stringstr1=“A”;

stringstr1=‘A’;

stringstr1=‘AB’;

stringstr1=“AB”;可以以数组的形式使用str1对象中的字符串str1[0]的值是???str1[1]的值是???当前90页,总共358页。912.5.1使用string对象类的初始化:stringstr1(“hello,”);

stringstr2=“world”;可以以数组的形式使用str1对象中的字符串str1[0]的值是???str2[0]的值是???当前91页,总共358页。922.5.1使用string对象当前92页,总共358页。932.5.1使用string对象运行结果当前93页,总共358页。942.5.1使用string对象string对象允许使用+运算当前94页,总共358页。952.5.1使用string对象对象的方法(操作/成员函数):对象名.成员函数str1.size()String对象可使用+运算Str1=str2+str3若str2=“hello,”

str3=“everyone”则str1的结果是???当前95页,总共358页。962.5.2使用string对象的成员函数成员函数使用格式:对象名.成员函数例如:str1.size()若Str1=“everyone!”Str1.size()值为:9当前96页,总共358页。972.5.2使用string对象的成员函数成员函数使用格式:对象名.成员函数例如:str1.substr()若Str1=“everyone”Str1.substr(5,3)值为:“one”C++中字符串中字符位置计数从0开始当前97页,总共358页。982.5.2使用string对象的成员函数成员函数使用格式:对象名.成员函数例如:str1.substr()C++中字符串中字符位置计数从0开始当前98页,总共358页。992.5.2使用string对象的成员函数成员函数使用格式:对象名.成员函数例如:str1.find(要查找的字符串,开始位置)结果为子串的位置C++中字符串中字符位置计数从0开始当前99页,总共358页。1002.5.2使用string对象的成员函数getline函数的使用功能:利用cin函数输入一行字符串存入对象例如:getline(cin,str1,’\n’)当前100页,总共358页。1012.5.2使用string对象的成员函数getline函数的使用功能:利用cin函数输入一行字符串存入对象例如:getline(cin,str1,’\n’)当前101页,总共358页。102简单应用:日期格式转换当前102页,总共358页。1032.5.3使用complex对象complex类用于定义一个复数对象使用时添加头文件#include<complex>定义格式:complex<int>num1(1,2);当前103页,总共358页。1042.5.4使用对象小结使用标准类库中的类时,须添加头文件。使用string对象添加???头文件?添加头文件#include<string>并使用标准命名空间usingnamespacestd;当前104页,总共358页。1052.5.4使用对象小结使用标准类库中的类时,须添加头文件。定义对象方式同变量定义方式。定义对象时可对对象进行初始化。inti;stringstr1;定义时初始化:inti=1;或inti(1);stringstr1=“hello”;或stringstr1(“hello”);当前105页,总共358页。1062.5.4使用对象小结使用标准类库中的类时,须添加头文件。定义对象方式同变量定义方式。同类的不同对象由对象名和属性来区分。具有相同的成员函数。stringstr1=“hello”;stringstr2(“everyone”);Cout<<str1.size()<<endl;Cout<<str2.size()<<endl;当前106页,总共358页。1072.5.4使用对象小结不同类对象具有不同的成员函数可实现不同操作。Complexnum1(1,2);Stringstr1(“hello”);Cout<<num1.real()<<endl;Cout<<str1.size<<endl;Cout<<str1<<endl;cout<<num1<<endl;当前107页,总共358页。1082.5.4使用对象小结使用标准类库中的类时,须添加头文件。定义对象方式同变量定义方式。定义对象时可对对象进行初始化。同类的不同对象由对象属性来区分。不同类对象具有不同的成员函数可实现不同操作。类是具有相同特征和操作的对象的抽象。当前108页,总共358页。1092.6string对象数组与泛型算法当前109页,总共358页。110第三章函数和函数模版3.1函数的参数及其传递方式C语言中参数传递方式只有一种:值传递值传递分为:变量值传递和变量地址值传递C++中分为:值传递和地址传递(引用传递)当前110页,总共358页。1113.1函数的参数及其传递方式12ba

xy12

t12

xy当前111页,总共358页。1123.1函数的参数及其传递方式12ba20002002

xy

t20002002当前112页,总共358页。1133.1函数的参数及其传递方式要注意区分:参数传递中传地址和传地址值不同。设计函数时要注意:对象作参数,对象指针作参数,对象引用作参数当前113页,总共358页。1143.1函数的参数及其传递方式3.1.1对象作函数参数作用同C语言中普通变量作参数当前114页,总共358页。1153.1函数的参数及其传递方式3.1.2对象指针作函数参数作用同C语言中变量指针作参数当前115页,总共358页。1163.1函数的参数及其传递方式3.1.3引用作为函数参数引用的声明形式:数据类型&别名=对象名;intx=56;int&a=x;int&b=a;则a为x变量(对象)的引用,a和x对应同一个内存空间。a未单独分配内存。b为a的引用。当前116页,总共358页。1173.1函数的参数及其传递方式3.1.3引用作为函数参数引用的声明形式:数据类型&别名=对象名;intx=56;int&a=x;int&b=a;b=10;则a为x变量(对象)的引用,a和x对应同一个内存空间。a未单独分配内存。b为a的引用。程序中引用对象的改变会使得被引用对象发生改变。当前117页,总共358页。1183.1函数的参数及其传递方式3.1.3引用作为函数参数引用作函数参数:类型函数名(类型&参数,……)函数调用时,实参对象名传递给形参对象名,形参对象名成为实参的别名,函数中对形参的改变就会导致实参值的改变。当前118页,总共358页。1193.1函数的参数及其传递方式3.1.3引用作为函数参数引用作函数参数:类型函数名(类型&参数,……)函数调用时,实参对象名传递给形参对象名,形参对象名成为实参的别名,函数中对形参的改变就会导致实参值的改变。当前119页,总共358页。1203.1函数的参数及其传递方式3.1.3引用作为函数参数引用作函数参数:类型函数名(类型&参数,……)当前120页,总共358页。1213.1函数的参数及其传递方式3.1.3引用作为函数参数引用作函数参数说明:1,引用对象不是一个独立对象,不占用内存。2,对象的指针作参数时,指针变量中存放实参对象的地址。3,引用对象作参数时,函数调用时形参对象和实参对象共用一个内存单元。当前121页,总共358页。122引用数组名作参数当前122页,总共358页。123引用数组名作参数一般格式:typedef类型类型别名使用typedef定义某类型别名后,可使用该别名来定义相关对象。例如:typedeflongintlint;则longinti;等价于linti;当前123页,总共358页。124Typedef使用说明typedef用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头等价于当前124页,总共358页。1253.1函数的参数及其传递方式3.1.4默认参数函数调用时,可以为函数指定实参,也可不指定实参,未指定实参时,函数自动取默认值。当前125页,总共358页。1263.1函数的参数及其传递方式3.1.4默认参数函数调用时,可以为函数指定实参,也可不指定实参,未指定实参时,函数自动取默认值。注意:若函数第n个参数是默认参数,当调用函数需要指定该参数值时,则该参数前的所有参数都必须指定。当前126页,总共358页。1273.1函数的参数及其传递方式3.1.5使用const保护数据const限定参数值不可修改。当前127页,总共358页。1283.2深入讨论函数的返回值当前128页,总共358页。1293.2深入讨论函数的返回值3.2.1返回引用的函数当前129页,总共358页。1303.2深入讨论函数的返回值3.2.2返回指针的函数定义数据个数定义指向数据的指针利用input函数输入数据若指向数据的指针非空则输出数据当前130页,总共358页。1313.2深入讨论函数的返回值3.2.2返回指针的函数输入数据个数存入n当前131页,总共358页。1323.2深入讨论函数的返回值3.2.3返回对象的函数当前132页,总共358页。1333.2深入讨论函数的返回值3.2.2返回指针的函数—补充说明:new语句

delete语句

NULLNew格式:指针变量=new类型[n]Delete格式:delete指针变量NULL表示空当前133页,总共358页。1343.2深入讨论函数的返回值当前134页,总共358页。1353.2深入讨论函数的返回值3.2.3返回对象的函数当前135页,总共358页。1363.2深入讨论函数的返回值3.2.4返回值作为函数参数当前136页,总共358页。1373.3内联函数当前137页,总共358页。138定义函数时,加inline关键字表示该函数为内联函数。3.3内联函数当前138页,总共358页。139定义函数时,加inline关键字表示该函数为内联函数。程序中的内联函数在程序编译时,将函数体替换至程序中函数调用位置,造成程序变长,效率提高。注意:内联函数中不能出现循环、switch语句内联函数一般短小,不宜过长应在调用之前声明或定义3.3内联函数当前139页,总共358页。1403.4函数重载和默认参数同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现当前140页,总共358页。1413.4函数重载和默认参数同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现定义或声明函数时,给出参数初始化值,则函数调用时若省略参数,则参数取该初始化值。称为默认参数。当前141页,总共358页。1423.4函数重载和默认参数同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现注意:函数重载和默认参数可同时使用。若已定义默认参数函数,则不能重载参数类型相同,参数个数少于默认参数个数的函数。当前142页,总共358页。1433.4函数重载和默认参数同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现注意:函数重载和默认参数可同时使用。若已定义默认参数函数,则不能重载参数类型相同,参数个数少于默认参数个数的函数。参数类型不同时,可以重载。当前143页,总共358页。1443.5函数模板有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。当前144页,总共358页。1453.5函数模板有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。当前145页,总共358页。1463.5函数模板有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。当前146页,总共358页。1473.5函数模板函数模板定义格式:定义函数模板后,函数调用时根据函数参数来类型来确定调用哪个版本的函数。函数执行时确定参数类型的函数称为模板函数。当前147页,总共358页。1483.5函数模板此种形式调用中<int>称为函数模板的参数一般可省略。Typename可替代class当前148页,总共358页。1493.5函数模板若某函数参数类型不一致时,也可定义函数模板。当前149页,总共358页。150第四章类和对象4.1类及其实例化4.1.1类的定义当前150页,总共358页。151当前151页,总共358页。152::称为域限定符,表示函数是类的成员函数。此时函数若要定义为内联,则加inline关键字,类内定义的函数默认为内联函数。当前152页,总共358页。153注意:类定义时,数据成员的赋值必须写在某个函数的内部。一般使用类似set的函数进行赋值。S1.set(1001,"张三",22,99.5)类student的set函数应该怎么定义????当前153页,总共358页。1544.1类及其实例化4.1.2使用类的对象类的对象的使用类似变量的使用。声明/定义对象,直接利用对象名使用通过对对象的引用使用对象通过指向对象的指针使用对象当前154页,总共358页。1554.1.2使用类的对象类的对象的使用类似变量的使用。在main函数中是否可按如下方式使用?当前155页,总共358页。1564.1.2使用类的对象数据成员使用规律:1,类的成员函数可以直接使用类的数据成员2,类外的函数不能使用类的私有成员3,类外的函数可以访问类的公有成员函数4,对象间的区别在于其属性值不同当前156页,总共358页。1574.1.3数据封装对象间利用公有成员函数进行通信。公用成员函数是对象的接口。当前157页,总共358页。1584.2构造函数4.2.1默认构造函数若类的定义中未定义构造函数,则C++编译器会自动产生一个不带参数的默认构造函数,类似于:point(){},此时不对对象进行初始化。若类中定义了构造函数,则不再产生默认构造函数。当前158页,总共358页。1594.2.2定义构造函数 构造函数无返回值,这样可以减少编译器的工作,提高效率。构造函数与类同名。构造函数可以重载。构造函数系统自动调用。

当前159页,总共358页。1604.2.2定义构造函数初始化列表初始化列表当前160页,总共358页。1614.2.3构造函数和运算符newNew和构造函数一同起作用,即new首先给对象分配内存,然后自动调用构造函数来初始化这块内存。

注意:new建立的动态对象只能用delete删除,一边释放空间。当前161页,总共358页。1624.2.4构造函数的默认参数这是错误的,因为Point()比有默认参数的函数少。当前162页,总共358页。1634.2.5复制构造函数

<类名>::<复制初始化构造函数>(const

<类名>&<引用名>);

Point(Point&p)比有默认参数的函数少,为什么它是对的。当前163页,总共358页。1644.3析构函数析构函数的调用由编译器自动调用析构函数名在类名前加~

析构函数无返回值析构函数无参数,可以显示说明为void

析构函数不可以重载析构函数在对象生命期结束的时候由系统自动调用。当前164页,总共358页。1654.3.1定义析构函数

类的对象数组的每个元素调用一次构造函数,调用一次析构函数。全局对象数组的析构函数在程序结束之前被调用。

当前165页,总共358页。1664.3.2析构函数和运算符deletedelete后自动调用析构函数。与new相反。

p81[例4.8]4.3.3默认析构函数编译器为没有析构函数的类自动产生一个空体析构函数,与构造函数类似。总结:分配几次内存调用几次构造函数,反之调用析构函数当前166页,总共358页。1674.4调用复制构造函数的综合实例

p82【例4.9】当前167页,总共358页。1684.5成员函数重载及默认参数

p85【例4.10】当前168页,总共358页。1694.6this指针

this指针是c++实现粉状的一种机制,它将对象和该对象调用的成员函数连接在一起。

this指针保证了每个对象可以拥有自己的数据成员。当前169页,总共358页。1704.7一个类的对象作为另一个类的成员

p87【例4.11】当前170页,总共358页。1714.8类和对象的性质4.8.1对象的性质同一类的对象之间可以相互赋值;可以使用对象数组;可以使用指向对象的指针;对象可以用作函数参数;对象作为函数参数时,可以使用对象、对象引用和对象指针;一个对象可以用作另一个类的成员。当前171页,总共358页。1724.8.1类的性质使用类的权限不完全的类声明只用当使用类产生对象时,才进行内存分配;类没有完全定义之前就引用该类不完全声明仅用于类和结构空类类作用域类中默认控制权限时private

当前172页,总共358页。1734.9面向对象的标记图

UML(UnifiedModelingLanguage)时1992年面向对象管理组(OMG)制定的面向对象分析和设计的国际标准。

UML时一种可视化建模语言,主要用于面向对象分析和建模。当前173页,总共358页。1744.9.1类和对象的UML标记图(识记)

Car+registrationnumber:String-data:CarData+speed:Integer+direction:Direction+drive(speed:Integer,direction:Direction)+getData():CarDataCar+registrationnumber:String-data:CarData+speed:Integer+direction:DirectionCar当前174页,总共358页。175类名类名{约束}属性[:类型[=初始值]]操作(参数列表):返回类型对象名:类名属性=值当前175页,总共358页。1764.9.2对象的结构与连接(识记)当前176页,总共358页。1774.10面向对象编程的文件规范4.10.1编译指令(识记)4.10.2在头文件中使用条件编译(领会)

当前177页,总共358页。178第五章特殊函数和成员5.1对象成员的初始化类的定义:当前178页,总共358页。1795.1对象成员的初始化当前179页,总共358页。1805.1对象成员的初始化当前180页,总共358页。1815.1对象成员的初始化示例【5.1】double变成了其他类当前181页,总共358页。1825.2静态成员成员定义时使用了static关键字1,静态成员变量的初始化只能在类外进行。2,类中的任何成员函数都可访问静态成员变量3,访问静态成员时,一般加上类名限定。4,静态成员变量是类的成员,不是对象的成员.5,对象未建立之前静态成员已经存在。6,静态成员没有this指针,除非使用引用方式否则不能存取类的成员。当前182页,总共358页。1835.2静态成员---静态对象当前183页,总共358页。1845.3友元函数可以实现两个类之间无限制的存取另一个类的成员。友元函数可以访问私有成员,公有成员和保护成员。友元函数可以是一个类或函数。友元需通过对象来使用类的成员。友元的三种形式:1,普通函数作一个类的友元2,a类的成员函数作b类的友元3,a类作为b类的友元当前184页,总共358页。1855.3友元函数1,普通函数作一个类的友元例5.4当前185页,总共358页。1865.3友元函数2,a类的成员函数作b类的友元当前186页,总共358页。1875.3友元函数2,a类的成员函数作b类的友元当前187页,总共358页。1885.3友元函数2,a类的成员函数作b类的友元当前188页,总共358页。1895.3友元函数3,a类作b类的友元当前189页,总共358页。190总结:友元函数可以实现两个类之间无限制的存取另一个类的成员。友元函数可以访问私有成员,公有成员和保护成员。友元函数可以是一个类或函数。友元需通过对象来使用类的成员。友元的三种形式:1,普通函数作一个类的友元2,a类的成员函数作b类的友元3,a类作为b类的友元当前190页,总共358页。1915.4const对象const可限定变量、指针、对象、函数、数据成员、成员函数。表示不可改变。1,const成员2,const对象3,const函数1,const成员区别于const变量const变量定义时需要初始化。const成员在构造函数中初始化(初始化列表形式)当前191页,总共358页。1925.4const对象1,const成员区别于const变量当前192页,总共358页。1935.4const对象1,const成员区别于const变量当前193页,总共358页。1945.4const对象2,const引用作参数当前194页,总共358页。1955.4const对象2,const对象和const函数const对象只能调用const成员函数const函数中不允许使用改变变量或成员值的语句当前195页,总共358页。196复习上节对象初始化:构造函数两种定义形式。

const限定的数据成员引用数据成员静态成员:静态数据成员,静态成员函数友元:普通函数做友元类的成员函数做友元类做友元const成员:const数据成员(const引用)

const成员函数

const对象当前196页,总共358页。197复习上节类的对象数组:对象数组中的每个元素都是一个对象。对象数组元素的使用同普通对象使用。对象的指针:指向对象的指针使用对象的成员函数和数据成员。对象指针数组:数组中每个元素都是一个指向对象的指针。指向函数的指针:函数有地址,指针能存地址,指针可以指向函数。当前197页,总共358页。1985.5数组和类类可定义对象数组。inta[5];inta[5]={1,2,3,4,5};pointp[3];pointp[3]={point(1,2),point(3,4),point(5,6)}定义数组时未初始化调用point()形式构造函数定义数组并初始化调用point(a,b)形式构造函数使用数组中的元素时利用:point[i]形式Point[i]的使用同普通对象使用方式相同当前198页,总共358页。1995.5数组和类类可定义对象数组,可定义指向对象的指针数组名是数组在内存中的首地址指针可以存放地址可用指针指向数组通过指针可以使用对象成员p->show()通过指针可以使用对象数组元素的成员P=a;a[0].show();p->show();当前199页,总共358页。2005.5数组和类定义对象的指针数组int*p;表示定义一个指针变量intp[5];表示定义一个数组。int*p[5]表示定义一个数组中有5个元素,每个元素是一个指针。此类数组称为指针数组。point*p;p=newpoint;p=newpoint(1,2);当前200页,总共358页。2015.5数组和类定义对象的指针数组point*p[3];p[0]=newpoint(1,2);p[1]=newpoint(3,4);p[2]=newpoint(5,6);通过p[0]使用p[0]指向的对象。p[0]->show();可通过循环使用p[i]指向的对象。当前201页,总共358页。2025.5数组和类定义指向对象的指针数组,并初始化。point*p[3]={newpoint(1,2),newpoint(3,4),newpoint(5,6)};当前202页,总共358页。2035.6指向成员函数的指针函数被调用时需要调入内存函数有地址:存放函数的内存单元的首地址指针可以存放地址存放函数地址的指针称为指向函数的指针定义形式:类型(*指针名)(参数类型);当前203页,总共358页。2045.6指向成员函数的指针intmax(inta,intb){returna>b?a:b;}voidmain(){ int(*p)(int,int); p=max; (*p)(1,2);}当前204页,总共358页。2055.6指向成员函数的指针若max函数是某类A的成员函数则:intA::max(inta,intb){returna>b?a:b;}voidmain(){ int(A::*p)(int,int);Aa; p=A::max; a.(*p)(1,2);}当前205页,总共358页。2065.7求解一元二次方程利用C++实现设计类,定义类,定义main函数定义对象,利用对象调用成员函数执行当前206页,总共358页。207设计类类的对象中应能存放相关数据:具有数据成员a,b,c一元二次方程的三个系数x1,x2存放求得的方程解delta存放b*b-4*a*c类的对象应能完成计算功能:具有成员函数1,将数据存入数据成员的函数2,显示结果的函数3,计算x1,x2的函数当前207页,总共358页。208定义类当前208页,总共358页。209设计类定义类的成员函数当前209页,总共358页。210main函数当前210页,总共358页。211main函数当前211页,总共358页。212main函数当前212页,总共358页。213main函数当前213页,总共358页。214main函数当前214页,总共358页。215第五章复习构造函数定义:classA{intapublic:

A(intx):a(x){}A(intx){a=x;}}const限定的数据成员初始化必须用?形式?还有什么数据成员必须用此种形式初始化??const限定的数据成员和引用数据成员初始化必须使用初始化列表形式。当前215页,总共358页。216静态成员不依赖于对象而存在。静态数据成员:定义时加static静态成员必须初始化使用语句:intA::b=0;静态对象:static对象一旦定义存在于内存中,直到程序结束才释放内存。当前216页,总共358页。217静态成员不依赖于对象而存在。静态成员使用注意:非静态对象静态成员可否使用?静态对象静态成员可否使用?静态对象非静态成员可否使用?静态成员函数非静态成员可否使用?非静态成员函数静态成员可否使用?当前217页,总共358页。218静态成员不依赖于对象而存在。其他注意事项:p1081-7静态函数没有this指针不能声明为virtual函数当前218页,总共358页。219友元普通函数作友元类的成员函数作友元类作友元类A的友元(函数,成员函数,类)可以访问类A中的所有成员,但必须通过对象或引用来访问。友元应在类A中利用friend声明当前219页,总共358页。220const对象const数据成员const成员函数const指针const变量const引用加const限定后不可改变,任何企图改变都导致错误,并应注意他们的初始化!!当前220页,总共358页。221使用规则:const对象不能调用任何非const成员函数const成员函数只能调用const成员函数非const对象可以调用const成员函数非const对象可以使用const数据成员const成员函数中不能使用任何试图改变变量值的语句。当前221页,总共358页。222数组和类类可以定义对象类可以定义对象数组对象数组中的每个元素都是对象,其使用方式和对象的使用方式相同。对象数组名表示数组的首地址可以定义指向对象的指针p使其指向某个对象可以用指针p指向数组中的元素当前222页,总共358页。223对象的指针数组使用函数指针定义形式:int(*p)(int,int);int(A::*P)(int,int);intmax(inta,intb){}intA::max(inta,intb){}当前223页,总共358页。224习题五-1当前224页,总共358页。225习题五-1当前225页,总共358页。226习题五-1当前226页,总共358页。227习题五-1当前227页,总共358页。228习题五-1当前228页,总共358页。229习题五-4当前229页,总共358页。230习题五-4当前230页,总共358页。231第六章继承和派生6.1继承和派生的基本概念继承关系是类与类之间的类属关系类:人类:学生类:教师在已有类的基础上定义新的类称为类的派生,新产生的类为派生类,原来的类为基类。(一般与特殊的关系)当前231页,总共358页。2326.1继承和派生的基本概念继承关系是类与类之间的类属关系类:人类:学生类:教师从成员构成来看,派生类具有基类的所有成员,基类又叫父类,派生类又叫子类。当前232页,总共358页。2336.1继承和派生的基本概念类的继承是指:派生类继承基类的所有数据成员和成员函数。用于表示类间的类属关系。非构成关系。派生类的特点:1,增加新成员。2,重定义已有成员函数。3,改变基类的成员的访问权限。当前233页,总共358页。2346.1继承和派生的基本概念人学生教师姓名、年龄、性别。。。。当前234页,总共358页。2356.2单一继承6.2.1一般形式class派生类名:访问控制基类名{private:成员列表;

public:成员列表;

protected:成员列表;};当前235页,总共358页。2366.2单一继承6.2.2派生类的构造函数和析构函数派生类中继承的基类的成员初始化时,需要由派生类的构造函数调用基类的构造函数。派生类的构造函数一般形式:派生类名::派生类名(参数):基类名(参数){//函数体}构造函数和析构函数不能被继承。当前236页,总共358页。2376.2单一继承类的派生实例有类human对象用于存放人的相关信息:

姓名,年龄,性别并能利用成员函数实现相关信息输出。在此基础上定义类student类,具有学号、班级信息,并能完成信息的输出显示。定义类,并设计测试程序。当前237页,总共358页。2386.2.2派生类的构造函数和析构函数当前238页,总共358页。2396.2.2派生类的构造函数和析构函数当前239页,总共358页。2406.2.2派生类的构造函数和析构函数当前240页,总共358页。2416.2.2派生类的构造函数和析构函数运行结果:问题:在student类中能否直接使用human类中的name,sex,age等成员??当前241页,总共358页。2426.2.2派生类的构造函数和析构函数此时程序无法运行!!!!!当前242页,总共358页。2436.2.2派生类的构造函数和析构函数类A定义中由private限定的成员只能在类A中使用。student虽然是human的派生类也不可使用human类中的private成员,所以在student中定义的show函数不可使用human中的name,sex,age等私有成员。当前243页,总共358页。2446.2.3类的保护成员protected公有派生得到的派生类不能使用基类的私有成员。那么如何解决派生类中访问基类的成员呢?并且不能打破封装性:基类的对象仍不可使用这些成员。当前244页,总共358页。2456.2.3类的保护成员protected公有派生得到的派生类不能使用基类的私有成员。protected限定的成员具有公有和私有双重性质该类成员在派生类中可访问,其他非成员函数不可访问。当前245页,总共358页。2466.2.3类的保护成员protected当前246页,总共358页。2476.2.3类的保护成员protected当前247页,总共358页。2486.2.3类的保护成员protected当前248页,总共358页。2496.2.3类的保护成员protected公有派生得到的派生类不能使用基类的私有成员。protected限定的成员具有公有和私有双重性质该类成员在派生类中可访问,其他函数不可访问。当前249页,总共358页。250复习上节基类、派生类、继承派生类的特点:1,增加新成员2,重定义已有函数3,改变成员访问权限当前250页,总共358页。251复习上节派生类的定义形式:class派生类名:访问控制基类名{private:成员列表;

public:成员列表;

protected:成员列表;};访问控制私有派生公有派生保护派生当前251页,总共358页。252复习上节派生类的定义形式:公有派生的特点:派生类中可访问基类中的protected成员派生类中可访问基类中的public成员派生类中不可访问基类中的private成员当前252页,总共358页。253复习上节公有派生和保护成员protected限定的成员具有公有和私有双重性质在基类中是私有的,在派生类中可访问。问题:1,基类的对象是否可访问protected成员?2,派生类的对象是否可访问公有派生类中继承自基类的protected成员?3,基类的成员函数是否可访问基类中的protected成员?4,派生类的成员函数是否可访问公有派生类中继承自基类的protected成员?当前253页,总共358页。254复习上节派生类的构造函数和析构函数:派生类的构造函数不

温馨提示

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

评论

0/150

提交评论