欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C++面向对象程序设计课件.ppt

    • 资源ID:80320663       资源大小:4.06MB        全文页数:800页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C++面向对象程序设计课件.ppt

    C+面向对象程序设计面向对象程序设计第一讲第一章 C+的初步知识 第二章 类和对象 第三章 关于类和对象的进一步讨论第四章 运算符重载 第五章 继承与派生 第六章 多态性与虚函数 第七章 输入输出流 结束放映结束放映第一章 C+的初步知识1.1 从C到C+1.2 C+语言的词法和词法规则1.3 最简单的C+程序1.4 C+对C的扩充1.5 C+程序的编写和实现1.1 从C到C+C语言是结构化和模块化的语言,C程序的设计者必须细致地设计程序中的每个细节,准确地考虑程序运行时每一时刻发生的事情,当程序规模变大时,结构化程序设计就显得力不从心。为了解决软件设计危机,在20世纪80年代提出了面向对象的程序设计思想(OOP)在实践中人们发现C语言使用如此广泛,如果在它的基础上发展一种面向对象的语言,一定会让大众容易接收这种语言,所以产生了C+。AT&T发布的第一个C+编译系统是一个预编译器,它把C+代码转换成C代码,然后再用C编译系统生成目标代码。1988 产生第一个C+编译系统1989 C+2.0 类的多重继承1991 C+3.0 类的模板 C+4.0 异常处理、命名空间1997 ANSI发布C+标准C+既可以用于面向过程的结构化程序设计,也可用于面向对象的程序设计。C+对C的增强体现在两个方面:1.对原来的面向过程机制做了扩充。2.增加了面向对象的机制。学习C+之后,既可以进行面向对象的程序设计,也可以进行面向过程的程序设计。1.2 C+语言的词法和词法规则C+语言的字符集语言的字符集等同于C语言的字符集,包括:(1)大小写英文字母(2)数字字符(3)其他ASCII码字符(除除、$外外)。单词及词法规则单词及词法规则单词是构成语句的关键成份之一,通常由若干字符组成,C+有几种单词:1.关键字 2.标识符3.运算符 4.分隔符 5.注释符。关键字关键字是C+语言中的命令字,它是预定义好的单词,C+编译程序对其有专门的解释。int、float、if、else、while、switch等等。标识符标识符程序员用标识符对程序中元素实施命名,包括函数名、类名、对象名、类型名、变量名、常变量名、数组名等。标识符以字母或下划线开始,后跟字母、数字、下划线,标识符区分大小写字母标识符区分大小写字母。运算符运算符运算符代表某种操作的单词,由一个或多个字符组成。注意运算符的优先级和结合顺序。参考本书附录B(P287)。分隔符分隔符在语句中关键字和标识符之间、各个语句之间要用分隔符分开。C+常用的分隔符有空格、逗号、分号、冒号、大括号。注释符注释符C+提供了两种注释符。/*注释*/注释1.3 最简单的C+程序 例1.1输出一行字符“This is a C+program.”。#include /用用cout输出时需要用输出时需要用 /此头文件此头文件using namespace std;/使用命名空间使用命名空间stdint main()coutThis is a C+program.n;/上面用上面用C+的方法输出一行的方法输出一行return 0;(1)标准C+规定main函数必须声明为int类型,如果程序正常运行,向操作系统返回一个零值,否则返回非零值,通常是-1。(2)C+程序中可以用/*/做注释,可以用/做注释。前者可以做多行注释,后者只做单行注释。(3)C+程序中常用cout、cin进行输出输入,cout是C+定义的输出流对象,是插入运算符。(4)使用cout、cin需要用头文件iostream,在程序开始要用#include声明包含的头文件。(5)using namespace std;意思是使用命名空间。C+标准库中的类和函数是在命名空间std中声明的,因此程序中如用C+标准库中的有关内容(此时需要用#include命令行),就要用using namespace std;语句声明。例1.2 求a和b 两个数之和 /求两数之和求两数之和#include /预处理命令using namespace std;/使用命名空间stdint main()/主函数首部 /函数体开始int a,b,sum;/定义变量cinab;/输入语句sum=a+b;/赋值语句couta+b=sum”是提取运算符,与cin配合,其作用是从输入设备中提取数据送到输入流cin中。在程序执行时,键盘输入的第一个数据赋予a,第二个数据赋予b。cout语句中的endl是C+控制符常数,作用是让光标换行。如果在本程序运行时输入:123 456 程序则输出:a+b=579例1.3 求两个数中的大数#include using namespace std;int main()int max(int x,int y);/对max函数作声明 int a,b,c;cinab;c=max(a,b);/调用max函数 coutmax=cy)z=x;else z=y;return(z);本程序包含两个函数,主函数main和被调用的函数max。max函数的作用是将两个整数中的大数赋予变量z。return语句将z的值返回给主函数main。返回值是通过函数名max带回到main函数的调用处。程序运行情况如下:18 25 (输入18和25)max=25 (输出最大值25)第二讲例1.4包含类的C+程序#include using namespace std;class Student /声明一个类,类名为Student private:/以下为类中的私有部分 int num;/私有变量num int score;/私有变量score public:/以下为类中公用部分 void setdata()/定义公用函数setdata cinnum;/输入num的值 cinscore;/输入score的值 void display()/定义公用函数display coutnum=numendl;/输出num的值 coutscore=scoreendl;/输出score的值;/类的声明结束 Student stud1,stud2;/定义stud1和stud2为Student类的变量,称为对象int main()/主函数首部stud1.setdata();/调用对象stud1的setdata函数 stud2.setdata();/调用对象stud2的setdata函数 stud1.display();/调用对象stud1的display函数 stud2.display();/调用对象stud1的display函数 return 0;程序中声明一个被称为类的类型Student。声明时要用关键字class。C+类中可以包含两种成员即数据(如变量num、score)和函数(如setdata函数和 display函数)。分别称为数据成员和成员函数。在C+中将一组数据和访问这组数据的函数封装在一起,组成类。一个类是由一组数据,一组对其访问的若干函数,以及数据和函数的访问属性组成的。在前面程序中看到的private(私有)public(公有)保留字代表数据和函数的访问属性。凡是指定为公有的数据和函数,既可由本类的函数访问和调用,也可由其他函数或语句访问和调用;凡是指定为私有的数据和函数,通常只能由本类的函数访问和调用。程序中“Student stud1,stud2;”是一个定义语句,定义两个Student 类型变量stud1和stud2,Student 类与int一样是C+的合法类型。具有类类型的变量称为对象。Student的对象stud1,stud2具有同样的结构和特征。在类外调用成员函数时必须在函数名前冠以类的名称。主函数中第一条语句输入学生1的学号和成绩,第二条语句输入学生2的学号和成绩,第三条语句输出学生1的学号和成绩,第四条语句输出学生2的学号和成绩。程序运行情况如下:1001 98.5 1002 76.5 num=1001Score=98.5num=1002Score=76.5为了与C兼容,C+保留了C语言中的一些规定,例如头文件的文件名,以C语言里头文件的扩展名是.h,许多C+编译系统保留了这种扩展名,近年推出的C+编译系统新版本,推出了一批不带扩展名的头文件如iostream,string,cmath 等。为了兼容C+仍允许使用带扩展名的头文件。由于C语言无命名空间,因此使用带扩展名的头文件时不用using namespace std。1.3 C+对C的扩充 C+既可用于面向过程的程序设计,也可用于面向对象程序设计。C+继承了C语言提供的绝大部分功能和语法规定,并在此基础上作了扩充。1.4.1 C+的输入和输出1.4.2 用const 定义常变量1.4.3 函数原型声明1.4.4 函数的重载1.4.5 函数模板1.4.6 有默认参数的函数1.4.7 变量的引用1.4.8 内置函数1.4.9 作用域运算符1.4.10 字符串变量1.4.11 动态分配/回收内存运算符1.3.1 C+的输入输出 C+为了方便使用,除了可以利用printf和scanf函数进行输入和输出外,还增加了标准输入流输出流cin和cout。它们是在头文件iostream中定义的,标准流是不需要打开文件和关闭文件就能直接操作的流式文件,在此标准输入流是指从键盘上输入的数据,标准输出流是指向屏幕输出的数据流。C+预定义的标准流如表1.2所示。1.用cout进行输出格式:cout 表达式1表达式2功能:由左向右逐个计算表达式的值,将其插入到输出流cout中。cout 必须与输出运算符一起使用,每个后跟一个表达式,运算符的结合方向是从左向右,所以各个表达式的值按从左到右的顺序插入到输出流中。For (k=1;k =3;k+)cout“k=“kendlendl是C+输出流的常数,在头文件iostream中定义,代表让光标换行。在C+中也可以用”n”控制光标换行。所以输出语句也可写成:cout“k=“k变量1 变量2 是C+的提取运算符,表示从标准输入设备取得数据,赋予其后的变量。从键盘输入数值数据时,两个数据之间用空格分隔或用回车分隔。int a;float bcinab;从键盘输入20 32.45 例1.5 cin和cout的使用#include using namespace std;int main()coutplease enter your name and age:name;cinage;coutyour name is nameendl;coutyour age is ageendl;return 0;1.3.2用const定义常变量 格式:const 类型 变量名=常数例:const float PI=3.14159;1.3.3函数原型声明 C+规定,如果函数调用在函数定义之前,要求在调用之前声明该函数的原型。格式:函数类型 函数名(形参表);形参表中形参可以只写类型。例:int max(int x,int y);或 int max(int,int);其实C+编译时,只检查参数的数据类型。1.3.4函数的重载 C+允许在同一个域中用一个函数名定义多个函数,这些函数的参数个数、参数类型不相同。用一个函数名实现不同的功能,用一个函数名实现不同的功能,就是函数的重载就是函数的重载。例1.6 设计程序计算三个数中的大数#include using namespace std;int max(int a,int b,int c)/求求3个整数中的最大者个整数中的最大者 if(ba)a=b;if(ca)a=c;return a;float max(float a,float b,float c)/求求3个实数中的最大者个实数中的最大者if(ba)a=b;if(ca)a=c;return a;long max(long a,long b,long c)/求求3个长整数中的最大者个长整数中的最大者if(ba)a=b;if(ca)a=c;return a;int main()int a,b,c;float d,e,f;long g,h,i;cinabc;cindef;cinghi;int m;m=max(a,b,c);/函数值为整型函数值为整型cout max_i=mendl;float n;n=max(d,e,f);/函数值为实型函数值为实型coutmax_f=nendl;long int p;p=max(g,h,i);/函数值为长整型函数值为长整型coutmax_l=pendl;return 0;例 1.7下面的例子说明用函数重载设计参数个数不同的函数,用一个函数名求两个整数或三个整数中的最大数。#include using namespace std;int max(int a,int b,int c)/求求3个整数中的最大者个整数中的最大者if(ba)a=b;if(ca)a=c;return a;int max(int a,int b)/求两个整数中的最大者求两个整数中的最大者if(ab)return a;else return b;int main()int a=7,b=-4,c=9;coutmax(a,b,c)endl;/输出输出3个整数中的最大者个整数中的最大者 coutmax(a,b)endl;/输出两个整数中的最大者输出两个整数中的最大者 return 0;注意:不允许函数参数个数、参数类型都相同,只是函数返回值不同。因为系统无法从调用形式上判断调用与哪个函数相匹配。1.3.5函数模板 如果两个函数的参数个数相同,函数的行为相同(做同样的事),只是函数和参数的数据类型不同,如果用函数重载的话,编写的函数代码是相同的,为了节省时间,C+提供了函数模板功能。格式:template typename 标识符标识符,typename 标识符标识符,函数定义(函数的类型和参数的类型用声函数定义(函数的类型和参数的类型用声明的标识符表示)明的标识符表示)template 是关键字,含义是模板typename 是关键字,表示其后的标识符代表类型参数,调用时根据实参的类型确定形参的类型。所谓函数模板,是建立一个通用函数,不指定函数类型和参数类型,而用一个虚拟的类型表示。在调用函数时,用实参的类型取代模板中的虚拟类型。例1.8 为计算两个数中的大数定义函数模板#include using namespace std;template T max(T a,T b,T c)/用虚拟类型用虚拟类型T表示类型表示类型if(ba)a=b;if(ca)a=c;return a;int main()int i1=8,i2=5,i3=6,i;double d1=56.9,d2=90.765,d3=43.1,d;long g1=67843,g2=-456,g3=78123,g;i=max(i1,i2,i3);d=max(d1,d2,d3);g=max(g1,g2,g3);couti_max=iendl;coutd_max=dendl;coutg_max=gendl;return 0;从程序中看到,此问题用函数模板比用函数重载更方便。注意,函数模板只适用于函数参数的个数相同而类型不同,并且函数体相同的情况,如果函数的参数个数不同,则不能用函数模板。1.4.6有默认参数的函数 C+允许为函数的参数设置默认值,这时调用函数时,如果没有实参,就以默认值作为实参值。格式:形参类型 形参变量名=常数功能:调用函数时,如果没有实参,就以常数作为该形参的值;如果有实参,仍以实参的值作为该形参的值。注意:有默认值的形参必须放在形参表的右边,不允许无默认参数值和有默认参数值的形参交错排列。例:编写计算圆柱体体积函数float volume(float h,float r=12.5)调用可以采用以下任何一种形式:volume(45.6);volume(32.5,10.5);函数参数结合从左到右,用第一种方式调用时,只有一个实参,圆半径的值取默认值12.5,用第二种方式调用时,有两个实参,圆半径的值取实参的值10.5。注意:一、如果用函数原型声明,只要在函数原型声明中定义形参的默认值即可。二、一个函数名不能同时用于重载函数和带默认形参值的函数。当调用函数时,如少写一个参数,系统无法判断是利用重载函数还是利用带默认参数值的函数,出现二义性。例如将例1.7中的第三行改为int max(int a,int b,int c=100);此时 max是重载函数,又带默认参数值,如果出现max(5,23)形式的调用,编译系统无法断定调用哪个函数,于是发出编译出错的信息。1.4.7变量的引用 C+提供了为变量取别名的功能,这就是变量的引用。格式:类型&变量1=变量2变量2是在此之前已经定义过的变量,且与变量1的类型相同。这里为变量2定义一个别名变量1,在程序里变量1和变量2 就是同一个变量。注意:两个变量不能用同一个别名。例:int a=3,b=4;int&c=a;/c是是a 的别名的别名 int&c=b;/错误的用法错误的用法一个变量可以有多个别名一个变量可以有多个别名例:int a=3;int&b=a;int&c=b;变量a 有两个别名b和c。#include using namespace std;int main()int a=10;int&b=a;/声明声明b是是a的引用的引用 a=a*a;/a的值变化了,的值变化了,b的值也应一起变化的值也应一起变化 couta bendl;b=b/5;/b的值变化了,的值变化了,a的值也应一起变化的值也应一起变化 coutb aendl;return 0;图1.1程序运行结果如下:100 10020 20将引用作为函数参数 C+除了可以用普通变量、指针变量做形参外,还可以用引用变量做形参。(1)用普通变量做形参这时传递的是实参的值,在函数内形参与实参是两个不同的内存单元,对形参的修改不会影响实参的值。例1.10无法实现两个变量的值互换的程序#include using namespace std;void swap(int a,int b)int temp;temp=a;a=b;b=temp;/实现实现a和和b的值互换的值互换int main()int i=3,j=5;swap(i,j);couti,jendl;/i和和j的值未互换的值未互换 return 0;图1.2(2)用指针变量做形参C语言还允许用指针变量做形参,这时传递的是实参变量的地址(指针),在函数内利用这个指针访问实参变量。例1.11用指针变量做形参,实现两个变量值的交换。#include using namespace std;void swap(int*p1,int*p2)int temp;temp=*p1;*p1=*p2;*p2=temp;int main()int i=3,j=5;swap(&i,&j);couti,jendl;return 0;图1.3(3)用引用变量做形参用指针变量做形参,它将实参变量的地址传递给形参,在函数内用“*指针变量”的方式访问实参变量。我们知道引用变量是变量的别名,在调用函数时,用引用变量做的形参就成了实参变量的别名,在函数中用的形参名就是实参的别名,这样比用指针变量更直观、更方便。例1.12利用引用变量实现两个变量值的交换#include using namespace std;void swap(int&a,int&b)int temp;temp=a;a=b;b=temp;int main()int i=3,j=5;swap(i,j);couti=i j=jendl;return 0;图1.4 对引用的进一步说明(1)引用变量都具有非void类型(2)不能建立引用的数组(3)可以建立常引用变量,不允许修改常引用变量的值例:int i;const int&a=i;a=3;/错误的用法错误的用法 i =8;/i 不是常变量,可以修改不是常变量,可以修改(4)可以建立指针变量的引用变量例:int i;int *p=&i;int*&pt=p;/pt是是p的别名变量,同时的别名变量,同时 /也是指针变量也是指针变量1.4.8内置函数 C+提供了一种机制,在编译时,将所调用的函数的代码嵌入到调用函数代码中,在执行函数时省去了调用环节,提高了函数的执行速度。这种机制称为内置函数,有的书称内联函数。格式:inline 函数类型 函数名(形参表)函数体 inline 是C+的关键字,在编译时,编译程序会把这个函数嵌入到调用函数的函数体中调用格式:函数名(实参表)例1.13计算三个整数中的大数#include using namespace std;inline int max(int a,int b,int c)/这是一个内置函数,这是一个内置函数,/求求3个整数中的最大者个整数中的最大者if(ba)a=b;if(ca)a=c;return a;int main()int i=7,j=10,k=25,m;m=max(i,j,k);coutmax=ma)a=b;if(ca)a=c;m=a;例1.15用内置函数计算平方根#include using namespace std;inline int power(int x)/定义内置函数定义内置函数return x*x;int main()coutpower(2)endl;coutpower(1+1)endl;return 0;编译程序遇见内置函数power时,先求出函数的实参值(1+1=2),然后用power函数体代替函数调用,调用语句变成:cout2*2endl;cout2*2endl;运行结果是44 使用内置函数可以节省程序的运行时间,但增加了目标程序的长度。所以在使用时要衡量时间和空间的得失。1.4.9作用域运算符 并不是所有的变量在程序运行的时时刻刻都是可见的。有的变量在整个程序运行期间都是可见的,称它们为全局变量;有的变量只能在一个函数中可知,被称为局部变量。每个变量都有其有效的作用域作用域,程序只能在变量的有效的作用域内使用变量,不能直接使用其他域中的变量。程序的内存区域程序的内存空间代码区全局数据区堆区栈区程序中各个函数的代码程序中全局数据和静态数据程序中的动态数据程序中各函数内的数据例1.16局部变量和全局变量同名#include using namespace std;float a=13.5;int main()int a=5;coutaendl;return 0;程序中有两个变量a,一个是全局变量,另一个是main函数的局部变量,根据局部变量会屏蔽同名的全局变量规则,在函数中出现的变量a是局部变量,因此输出的值是5,而不是13.5,为了在函数中访问全局变为了在函数中访问全局变量量C+提供了提供了作用域作用域运算符运算符:,可以用来指定要访问的作用域,可以把main函数改写成#include using namespace std;float a=13.5;int main()int a=5;coutaendl;cout:a 字符串变量 cout、=、=、!=、“chinese”运算结果是假。1.4.11动态分配/撤销内存的运算符new和delete 分配内存运算new 类型 (初值)类型是决定分配空间尺寸的关键元素,如果运算结果正确,它的值是分配内存空间的起始地址,否则返回NULL。例:int *a=new int;int *b=new int(100);char*ch=new char10;int*q=new int 54;float *p=new float(3.14159);归还动态内存运算delete 指针变量 代表数组,如果不是数组可以省略。运算功能:撤销指针变量所指的动态内存空间,指针变量的数据类型决定了空间尺寸的大小。例:char*p=new char10;delete p;例1.18用动态内存存放结构体变量#include#include using namespace std;struct student char name 10;int num;char sex;int main()student*p;p=new student;strcpy(p-name,Wang Fun);p-num=10123;p-sex=M;coutname num sex num;cin name;cin sex;void display()cout numendl;cout nameendl;cout sex num;cin name;cin sex;void display()cout numendl;cout nameendl;cout sex num;cin name;cin sex;void student:display()cout numendl;cout nameendl;cout sex num;cin name;cin sex;void student:display()cout numendl;cout nameendl;cout sex hour minute sec;可以用下面的语句计算该类对象占用的字节数 cout sizeof(Time)endl;结果输出值是12,这是数据成员所占的空间尺寸,这就证明一个对象占用的空间其实是它的数据成员占据的内存空间。2.4 对象成员的引用 定义了对象后,在程序中可以直接访问对象中的公有成员,它们可以是数据成员,也可以是成员函数。在程序中访问对象成员有三种方法。2.4.1 用对象名和成员运算符访问成员2.4.2 用指向对象的指针访问成员2.4.3 用对象的引用访问成员2.4.1通过对象名和成员运算符访问对象中的成员 格式:对象名.成员名例:st1.display();/调用成员函数调用成员函数 display();/调用普通函数调用普通函数注意:只有成员函数可以访问类中的所有注意:只有成员函数可以访问类中的所有成员,而在类外只能访问公有成员。成员,而在类外只能访问公有成员。如果在类外面用下面的语句是错误的:st1.num=101012.4.2通过指向对象的指针访问对象中的成员 可以通过指针访问对象中的成员。class Time public:int hour;int minute;Time t,*p;p=&t;couthourhour表示p当前指向对象t中的成员hour,此时(*p).hour也代表对象t中的成员hour,在这个例子中,p-hour、(*p).hour、t.hour三种表示是一个意思。2.4.3通过对象的引用来访问对象中的成员 如果为一个对象A定义一个引用B,B是对象A的别名,A和B都是一个对象,所以完全可以通过引用访问对象中的成员。Time t1;Time&t2=t1;cout t2.hour;这里t2是t1的别名,所以访问t2.hour就是访问t1.hour。2.5类和对象的简单应用举例这小节通过几个例子说明怎样用类设计程序,以及使用类的长处。例2.1#include using namespace std;class Time public:int hour;int minute;int sec;int main()Time t1;Time&t2=t1;cint2.hour;cint2.minute;cint1.sec;coutt1.hour:t1.minute:t2.secendl;注意:必须在引用成员之前加对象名而不是类名。数据成员必须有初始值后才能访问,否则它们的值是不可预知的。例2.2 引用多个对象成员(1)程序(a)#include using namespace std;class Time public:int hour;int minute;int sec;int main()Time t1;cint1.hour t1.minutet1.sec;coutt1.hour:t1.minute:t1.seccoutt2.hourt2.minutet2.sec;coutt2.hour:t2.minute:t2.seccoutendl;return 0;上面的例子中只有两个对象就显得有些繁琐,为了解决这个问题,可以在主函数中定义输入输出函数进行输入和输出。(2)程序(b)#include using namespace std;class Time public:int hour;int minute;int sec;int main()void set_time(Time&);/使用引用形参使用引用形参 void show_time(Time&);Time t1;set_time(t1);show_time(t1);Time t2;set_time(t2);show_time(t2);return 0;void set_time(Time&t)cint.hour;cint.minute;cint.sec;void show_time(Time&t)coutt.hour:t.minute:t.secendl;例2.3用成员函数处理输入输出#include using namespace std;class Time public:void set_time();void show_time();private:int hour;int minute;int sec;int main()Time t1;t1.set_time();t1.show_time();Time t2;t2.set_time();t2.show_time();return 0;void Time:set_time()cinhour;cinminute;cinsec;void Time:show_time()couthour:minute:secendl;例2.4在整型数组中找最大值#include using namespace std;class Array_maxpublic:void set_value();void max_value();void show_value();private:int array10;int max;void Array_max:set_value()int i;for(i=0;iarrayi;void Array_max:max_value()int i;max=array0;for(i=1;imax)max=arrayi;void Array_max:show_value()coutmax=num name;cin age sex;void student:display()cout numendl nameendl;cout age endl sex endl;student st1,st2;当接口与实现(对数据的操作)分离时,只要类的接口没有改变,对私有实现的修改不会影响程序的其他部分。(2)如果在编译时发现类中的数据读写有错,不必检查整个程序,只需检查本类中访问这些数据的成员函数。这就使得程序(尤其是大程序)的设计、修改和调试变得方便和简单了。2.6.2 类声明和成员函数定义的分离 面向对象程序开发时,一般将类的声明(包括成员函数的声明)放在指定的头文件中,在程序中只要把有关的头文件包含进来即可。不必在程序中重复写类的声明。还有一种方法是把类成员函数不定义在头文件中,而另外放在一个文件中。/student.h 这是头文件在此声明类这是头文件在此声明类class student int num;char name10;char sex;public:void setdata();void display();/student.cpp#include#include student.h using namespace std;void student:setdata()cin num;cin name;cin sex;void student:display()cout num endl;cout name endl;cout sex endl;#include#include student.h using namespace std;int main()student st1;st1.setdata();st1.display();return 0;这个程序包含了三个文件,一个是主模块main.cpp,一个是student.cpp。在预编译时会将头文件student.h中内容取代#include“student.h”行。可以按对多个文件程序的编译和运行方法对程序进行编译和连接。C+编译系统对两个.cpp文件分别进行编译,得到两个.obj文件,然后将它们和其他系统资源连接起来,形成可执行文件main.exe。图2.6可以不必每次对student.cpp进行编译,把第一次编译后形成的目标文件保存起来,以后在需要时把它调出来直接与程序的目标文件相连即可。这和使用函数库中的函数是类似的。在实际中,将若干个常用的功能相近的类声明集中在一起,形成类库。类库包括C+编译系统提供的标准类库,用户的类库。类库有两个组成部分:(1)类声明头文件(2)经过编译的成员函数的定义,它是目标文件。用户只要把类库装入C+编译系统所在的子目录中,并在程序中用include命令把类声明的头文件包括到程序中,就能使用这些类和其中的成员函数。2.6.3 面向对象程序设计中的几个名词 类的成员函数在面向对象程序理论中又称为方法,方法是指对数据的操作。只有被声明为公有的方法(成员函数)才能被对象外界所激活。外界是通过发消息激活有关的方法。所谓消息其实就是一条命令,由程序语句实现。如st1.display();是向对象st1发出一个消息,让它执行display方法,这里,st1是对象对象,display()是方法方法,语句st1.display();是消息消息。习题 1.请检查下面程序,找出其中的错误(先不要上机,在纸面上作人工检查),并改正之。然后上机调试,使之能正常运行。运行时从键盘输入时、分、秒的值,检查输出是否正确。#include using namespace std;class Time void set_time(void);void show_time(void);int hour;int minute;int sec;Time t;int main()set_time();show_time();int set_time(void)cint.hour;cint.minute;cint.sec;int show_time(void)coutt.hour:t.minute:t.secendl;2.改写本章例2.1程序,要求:(1)将数据成员改为私有的;(2)将输入和输出的功能改为由成员函数实现;(3)在类体内定义成员函数。第3章 关于类和对象的进一步讨论 通过第二章的学习,已经对类和对象有了初步了解。本章将对类和对象进行进一步的讨论。3.1构造函数 3.2析构函数 3.3调用构造函数和析构函数的顺序3.4对象数组 3.5对象指针 3.6共用数据的保护 3.7对象的动态建立和释放 3.8对象的赋值和复制 3.9静态成员 3.10友元 3.11类模板 3.1构造函数 如果定义一个变量,而程序未对其进行初始化的话,这个变量的值是不确定的,因为 C和C+不会自觉地去为它赋值。与此相似,如果定义一个对象,而程序未对其数据成员进行初始化的话,这个对象的值也是不确定的。3.1.1 对象的初始化3.1.2 构造函数的作用3.1.3 带参数的构造函数3.1.4 用参数初始化表初始化数据成员3.1.5 构造函数的重载3.1.6 使用默认参数的构造函数3.1.1对象的初始化 在定义一个类时,不能对其数据成员赋初值,因为类是一种类型,系统不会为它分配内存空间。在建立一个对象时,需要对其数据成员赋初值。如果一个数据成员未被赋初值,则它的值是不确定的。因为系统为对象分配内存时,保持了内存单元的原状,它就成为数据成员的初值。这个值是随机的。C+提供了构造函数机制,用来为对象的数据成员进行初始化。在前面的学习中一直未讲这个概念,其实如果你未设计构造函数,

    注意事项

    本文(C++面向对象程序设计课件.ppt)为本站会员(文***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开