版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++面向对象程序设计PAGE27面向对象程序设计概述(1)——什么是面向对象程序设计教学目的:要求学生理解什么是面向对象程序设计。教学重点、难点:面向对象程序设计的基本概念、基本特征。课时安排:二课时(第1、2课时)教学手段:使用计算机多媒体设备进行教学,使用计算机设备进行实践训练。教学过程:1.1什么是面向对象程序设计1.1.1新的程序设计范型面向对象程序设计是一种新型的程序设计范型。这种范型的主要特征是:程序=对象+消息1.1.2面向对象程序设计的基本概念
1.
对象在现实世界中,任何事物都是对象。现实世界中的对象,具有以下特性:每一个对象必须有一个名字以区别于其他对象;用属性来描述它的某些特征;有一组操作,每个操作决定对象的一种行为;对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。2.
类在实现世界中,“类”是一组具有相同属性和行为的对象的抽象。类和对象之间的关系是抽象和具体的关系。类是多个对象进行综合抽象的结果,一个对象是类的一个实例。3.消息在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。4.方法方法就是对象所能执行的操作。方法包括界面和方法体两部分。1.1.3面向对象程序设计的基本特征1.抽象2.封装3.继承4.多态1.2为什么要使用面向对象程序设计
1.2.1传统程序设计方法的局限性(1)传统程序设计开发软件的生产效率低下(2)传统程序设计难以应付日益庞大的信息量和多样的信息类型(3)传统的程序设计难以适应各种新环境1.2.2面向对象程序设计的主要优点(1)可提高程序的重用性(2)可控制程序的复杂性(3)可改善程序的可维护性(4)能够更好地支持大型程序设计(5)增强了计算机处理信息的范围(6)能很好地适应新的硬件环境1.3面向对象程序设计的语言
1.3.1面向对象程序设计语言的发展概况1.3.2几种典型的面向对象程序设计语言1.Smalltalk语言2.Simula语言3.C++语言4.Java语言课后总结:本次课主要介绍计算机程序设计语言的发展及特点,了解计算机的程序设计和面向对象设计的一般知识,对于以后课程学习打下了一个良好的基础。
面向对象程序设计概述(2)——VisualC++6.0集成编程环境的使用教学目的:(1)熟悉VisualC++6.0的开发环境(工具栏及各种窗口)。(2)(3)用应用程序向导创建一个控制台应用项目Ex_Hello。(4)显示和隐藏工具栏。输入并编译一个新的C++程序。教学重点、难点:面向对象程序设计的基本概念、VisualC++6.0集成编程环境的使用。课时安排:二课时(第1、2课时)教学手段:使用计算机多媒体设备进行教学,使用计算机设备进行实践训练。教学过程:
实验内容1.启动WindowsXP操作系统打开计算机,启动Windows2000操作系统。2.创建工作文件夹图0.1显示提示对话框创建VisualC++6.0的工作文件夹“…\VisualC++程序\实验”(…表示自己的文件夹),在文件夹“实验”下再创建一个文件夹“实验0”,下一次实验就在“实验”文件夹下创建子文件夹“实验1图0.1显示提示对话框3.启动VisualC++6.0选择“开始”→“程序”→MicrosoftVisualStudio6.0→MicrosoftVisualC++6.0,运行VisualC++6.0。第一次运行时,将显示“当时的提示”对话框。单击“下一个提示”按钮,可看到有关各种操作的提示。如果取消选中“再启动时显示提示”复选框,那么下一次运行VisualC++6.0,将不再出现此对话框,如图0.1所示。4.认识开发环境界面单击“结束”按钮关闭此对话框,进入VisualC++6.0开发环境。开发环境界面由标题栏、菜单栏、工具栏、项目工作区窗口、文档窗口、输出窗口和状态栏等组成,如图0.2所示。工具栏菜单栏工具栏菜单栏项目工作区窗口输出窗口文档窗口输出窗口标签标题栏状态栏图0.2VisualC++6.0中文版开发环境标题栏一般有“最小化”、“最大化”或“还原”以及“关闭”按钮,单击“关闭”按钮将退出开发环境。标题栏上还显示出当前被操作的文档的文件名。菜单栏包含了开发环境中几乎所有的命令,它为用户提供了文档操作、程序的编译、调试、窗口操作等一系列的功能。菜单中的一些常用命令还被排列在相应的工具栏上,以便用户更好地操作。项目工作区窗口包含用户项目的一些信息,包括:类(ClassView页面)、项目文件(FileView页面)和资源(ResourceView页面)等。在项目工作区窗口中的任何标题或图标处单击鼠标右键,都会弹出相应的快捷菜单,包含当前状态下的一些常用操作。文档窗口一般位于开发环境中的右边,各种程序代码的源文件、资源文件、文档文件等都可以通过文档窗口显示出来。输出窗口一般出现在开发环境窗口的底部,包括编译(Build)、调试(Debug)、查找文件(FindinFiles)等相关信息的输出。这些输出信息以多页面标签的形式出现在输出窗口中,例如“编译”页面标签显示的是程序在编译和连接时的进度及错误信息。状态栏一般位于开发环境的最底部,它用来显示当前操作状态、注释、文本光标所在的行列号等信息。5.显示和隐藏工具栏显示或隐藏工具栏可以使用“定制”对话框或快捷菜单两种方式进行操作。(1)“定制”对话框方式操作步骤如下:①选择“工具”菜单→“定制”菜单项,弹出“定制”对话框,如图0.3所示。 图0.3“定制”对话框 图0.4工具栏的快捷菜单②单击“工具栏”标签项,将显示出所有的工具栏名称,凡显示在开发环境上的工具栏名称前面均带有选中标记√。③单击“编译”工具栏名称,复选框中带有选中标记,该工具栏将显示开发环境中。再单击“编译”工具栏名称,复选框的选中标记将去除,该工具栏从开发环境中消失。其他工具栏的显示和隐藏均可类似操作。(2)快捷菜单方式如果嫌上述操作不够便捷,那么可以在开发环境中工具栏或菜单栏处右击鼠标,将会弹出一个包含工具栏名称的快捷菜单,如图0.4所示,凡显示在开发环境上的工具栏,其相应的菜单项前面就会有选中标记√。对相应的工具栏进行选择将使其显示或隐藏。6.工具栏的浮动与停泊VisualC++6.0的工具栏具有“浮动”与“停泊”功能。VisualC++6.0启动后,系统默认将常用工具栏“停泊”在主窗口的顶部。若将鼠标指针指向工具栏的非按钮区域,可以将工具栏拖放到主窗口的四周或中央。如果拖放到窗口的中央处,则工具栏成为“浮动”的工具窗口。窗口的标题就是工具栏的类型名称。拖放工具栏窗口的边或角可以改变其形状。图0.5浮动的“标准”工具栏例如,将鼠标指针指向“标准”工具栏的非按钮区域,按住鼠标左键不放,将其拖至屏幕中央,释放鼠标左键,观察变化。再将鼠标指针移至工具栏窗口的边界处,按住鼠标左键不放并拖动,观察大小的变化。图0.5是“标准”工具栏浮动的状态,其大小已被拖放过。当然,浮动和停泊两种状态可以进行切换。在“浮动”的工具窗口标题栏处双击鼠标左键或将其拖放到主窗口的四周,都能使其停泊在相应的位置处。在“停泊”工具栏的非按钮区域双击鼠标左键,可切换成“浮动”的工具窗口。7.创建和编连控制台应用项目 在VisualC++6.0中,用应用程序向导创建和编连一个控制台应用程序,可按下列步骤进行:①选择“文件”→“新建”菜单命令,显示出“新建”对话框,如图0.6所示。图0.6新建一个工程②选择“工程”标签,并从列表框中选中Win32ConsoleApplication项。③在“工程”编辑框中键入控制台应用程序项目名称Ex_Hello,并将项目文件夹定位到“D:\VisualC++程序\实验\实验0”。④单击“确定”按钮,显示Win32应用程序向导对话框。第一步是询问项目类型,如图0.7所示。图0.7控制台应用程序的第1步⑤选中A“Hello,World!”application项。单击“完成”按钮,系统将显示向导创建的信息,单击“确定”按钮将自动创建此应用程序。⑥默认时,项目工作区窗口显示的是ClassView页面,将所有内容展开,双击main项,在文档窗口中将main函数体中的"HelloWorld!\n"改为"ILikeVisualC++6.0中文版!\n",结果如图0.8所示。图0.8修改代码说明:在输入字符和汉字时,要切换到相应的输入方法中,除了字符串和注释可以使用汉字外,其余一律采用英文字符输入。代码中,stdafx.h是每个应用程序所必有的预编译头文件,程序所用到的VisualC++头文件包含均添加到这个文件中。=7\*GB3⑦单击编译工具条上的生成工具按钮或直接按快捷键F7,系统开始对Ex_Hello进行编译、连接,同时在输出窗口中观察出现的内容,当出现:表示Ex_Hello.exe可执行文件已经正确无误地生成了。图0.9运行结果=8\*GB3⑧单击编译工具条上的运行工具按钮或直接按快捷键Ctrl+F5,就可以运行刚刚生成的Ex_Hello.exe了,结果如图0.9所示。图0.9运行结果8.输入并编译一个新的C++程序①选择“文件”→“关闭工作区”菜单,关闭原来的项目。②按上面的方法创建一个Win32ConsoleApplication项目Ex_Simple,在向导的第一步中选择Anemptyproject类型。③再次选择“文件”→“新建”菜单命令,显示出“新建”对话框“文件”页面,如图0.10所示。图0.10“新建”对话框的“文件”页面④在文件类型列表中选择C++SourceFile,然后在“文件”框中输入要创建的文件名Ex_Simple,文件扩展名可以不必输入,系统会自动添加cpp扩展名(cpp是CPlusPlus的缩写,即C++的意思)。单击“确定”按钮,在打开的文档窗口中输入下列C++代码:/*程序Ex_Simple,一个简单的C++程序*///C++程序的基本结构#include<iostream.h>voidmain(){ doubler,area; //声明变量 cout<<"输入圆的半径:"; //显示提示信息 cin>>r; //从键盘上输入变量r的值 area=3.14159*r*r; //计算面积 cout<<"圆的面积为:"<<area<<"\n"; //输出面积}⑤此时在文档窗口中所有代码的颜色都发生改变,这是VisualC++6.0的文本编辑器所具有的语法颜色功能如图0.11所示。其中,绿色表示注释,蓝色表示关键词等。图0.11编辑器的代码语法颜色功能⑥按快捷键F7,系统开始编译。编译后,再按快捷键Ctrl+F5就可运行了。说明:对于C/C++语言工程项目的创建,凡没有特别说明,均采用此方法。9.退出VisualC++6.0退出VisualC++6.0有两种方式:一种是单击主窗口右上角的“关闭”按钮,另一种是选择File→Exit菜单。10.写出实验报告结合思考与练习题,写出实验报告。思考与练习(1)除工具栏可以浮动和停泊外,看看还有哪些窗口可以这样操作?(2)经过创建项目文件的实验,试总结出创建一个控制台应用项目的一般方法。课后总结:本次课主要介绍VC6.0的基本操作。大部分同学都已经掌握。
C++基础(1)——学习C++的一些基础知识弄清C++与C的关系教学目的:要求学生学习C++的一些基本知识C++与C一些联系。教学重点、难点:C++程序的结构、C++与C的一些联系。课时安排:二课时(第1、2课时)教学手段:使用计算机多媒体设备进行教学,使用计算机设备进行实践训练。教学过程:
教学内容2.1C++的产生和特点
2.1.1C++C++是美国贝尔实验室于1980年开发出来的一种过程性与面向对象性结合的程序设计语言。最初他把这种新的语言叫做“含类的C”,到1983年才取名为C++。2.1.2C++(1)C++保持与C兼容。(2)用C++编写的程序可读性更好,代码结构更为合理,可直接地在程序中映射问题空间的结构。(3)生成代码的质量高,运行效率仅比汇编语言代码段慢10%到20%。(4)从开发时间、费用到形成的软件的可重用性、可扩充性、可维护性和可靠性等方面有了很大的提高,使得大中型的程序开发项目变得容易的多。(5)支持面向对象的机制,可方便地构造出模拟现实问题的实体和操作。2.2C++程序的结构特性
2.2.1一个简单的C++示例程序例2.1两数相加//sum.cpp#include<iostream.h>intadd(inta,intb);//函数原型说明intmain()//主函数{intx,y,sum;//定义三个整型变量cout<<Entertwonumbers:<<\n;//界面:提示用户输入两个数cin>>x;//从键盘输入变量x的值cin>>y;//从键盘输入变量y的值sum=add(x,y);//调用函数add,将得到的值赋给变量sumcout<<Thesumis:<<sum<<\n;//输出两个数的和sum的值return0}intadd(inta,intb)//定义add函数,函数值为整型{intc;//定义一个整型变量c=a+b;//计算两个数的和returnc;//将c的值返回,通过add带回调用处}2.2.2C++类的声明部分面向对象程序类的使用部分例2.2典型的C++程序结构#include<iostream.h>//类的声明部分classA{intx,y,z;//类A的数据成员声明¡fun(){¡}//类A的成员函数声明¡};//类的使用部分intmain(){Aa;//创建一个类A的对象a¡a.fun();//给对象a发消息,调用成员函数fun()
return0;}
2.2.3C++C源程序文件扩展名为.C,而C++源程序文件扩展名为.CPP。在DOS下,C++程序的编辑、编译及运行方法和过程与C语言基本一样,如TurboC++或BorlandC++都有带C和C++两种编辑器,当源程序文件扩展名为.C时,启动C编译器,当源程序文件扩展名为.CPP时启动C++编译器。在Windos下,我们常用VisualC++开发环境,来编辑、编译和运行C++程序。2.3C++在非面向对象方面的扩充2.3.1注释与续行以下两条语句是等价的:x=y+z;/*Thisisacomment*/x=y+z;//Thisisacomment2.3.2输入输出流例2.3一个完整的C++程序。#incluade<iostream.h>intmain(){charname[20];cout<<"Hello,yourname:";cin>>name;cout<<name;return0;}2.3.3灵活的变量说明floatfun(intx,inty)//对形参直接进行说明{for(inti=0;i<10;i++)//对循环变量i进行说明{intsum=0;//循环体内也可对变量sum进行说明sum=sum+i;cout<<"sum="<<sum;}intz=0;//使用变量z时才说明它z=x+y;}2.3.4结构、联合和枚举名例如:enumboole{FALSE,TRUE};structstring{char*str;intlength;};unionnumber{inti;floatf;};C++在中,定义变量时,可以说明为:booledone;stringstr;numberx;2.3.5函数原型
例2.5函数原型的说明。#include<iostream.h>voidwrite(char*s);//函数原型的说明voidmain(){write("Hello,world!");}voidwrite(char*s){cont<<s;}课后总结:这次课主要介绍了C++的一些基础知识。重点学习的是C++程序的基本结构。下次课重点复习。C++基础(1)——学习C++的一些基础知识(实训)教学目的:要求学生学习C++的一些基本知识C++与C一些联系。教学重点、难点:C++程序的结构、C++与C的一些联系。课时安排:二课时(第1、2课时)教学手段:使用计算机多媒体设备进行教学,使用计算机设备进行实践训练。教学过程:上机方法和步骤1)启动VisualC++1:2)创建一个新的C++SourceFile(见图1-2)在VC的主窗口中打开“文件”菜单,单击“New”命令选项,进入“New”对话框,选择该对话框的“File”页,在该页的File功能列表中双击“C++Source”项,则进入到程序文件编辑窗中。
图1-2选择“C++Source”功能3)编辑C++SourceFile进入“程序文件编辑“窗中(见图1-3),即可用Windows提供的文本编辑的一般方法编辑程序,所谓一般方法包括文字或文字块的输入、修改,文字或文字块的删除、复制、粘贴等。图1-3VC6.0的程序编辑器4)保存C++文件程序编辑完毕(或者程序部分编辑完成),可以执行文件保存命令(Save或SaveAs)以保存文件,“SaveAs“命令所对应的对话框如图1-4所示,源程序文件(C++SourceFile)的扩展名为cpp。图1-4“SaveAs”对话框
5)源程序文件的编译执行“Build”菜单上“Compile”命令,即可对已打开的源程序文件进行编译,编译结果(含出错信息)显示在主窗口下部的“编译结果信息”输出框中(图1-5的红框部分)。图1-5编译结果信息输出
6)如果程序有语法错,可参照“输出窗中给出的提示进行修改,然后重复5)—6),直至出错提示全部消除,生成目标文件(*.obj)以及其他相关文件。7)生成可执行文件(程序的链接)执行“Build”菜单上“Build”命令,即可对已生成的的目标文件进行链接,生成可执行文件(*.exe),Build结果(含出错信息)显示在主窗口下部的输出框中(图1-6的红框部分)。图1-6链接结果信息输出
8)程序的执行执行“Build”菜单上“Excute”命令,即可执行步骤7)所生成的可执行文件,并显示如图1-7所示的Dos窗口。图1-7执行C++Source程序所显示的窗口
9).编写程序用字符组成各种图案
程序功能:在屏幕上输出以字符组成的三角形(金字塔)和梯形(可参照图3-1和图3-2所示的图例)。*#################################################################################################图3-2用“#”组成的梯形**********************************************************************图3-1用“*”组成的三角形
要求:组成图形的字符和图形的行数通过键盘输入。测试数据:请分别输入三组数据进行测试。10)按照图片录入程序,然后进行程序改错,完成后保存至d:\计0801\自己姓名\中:课后总结:(1)应建立专用的文件夹来保存源程序文件并且要记住该文件夹的准确路径。(2)程序如有语法错误,编译程序会以语句行为单位在输出框中给出详细的出错信息,只要双击输出框中的某条出错信息,光标即自动定位到包含该错误的语句行上(编辑窗中)。(3)一个语法错误可能导致出现多个相关语法成分出现语法错误,排除主要的语法错误后,相关的语法错误则同时自行排除。C++基础(2)——学习C++的一些基础知识弄清C++与C的关系教学目的:要求学生学习C++的一些基本知识C++与C一些联系。教学重点、难点:C++程序的结构、C++与C的一些联系。课时安排:二课时(第1、2课时)教学手段:使用计算机多媒体设备进行教学,使用计算机设备进行实践训练。教学过程:
教学内容2.3.6const修饰符
例2.6#define的不安全性#include<iostream.h>main(){inta=1;#defineT1a+a#defineT2T1-T1cout<<"T2is"<<T2<<endl;return0;}例2.7用const取代#define。#include<iostream.h>intmain() {inta=1;constT1=a+a;constT2=T1-T1;cout<<"T2is"<<T2<<endl;return0;}输出:T2is0(1)指向常量的指针是指:一个指向常量的指针变量。例如:constchar*pc="abcd";//声明指向常量的指针(2)常指针是指:把指针本身,而不是它指向的对象声明为常量。例如:char*constpc="abcd";//常指针(3)指向常量的常指针是指:这个指针本身不能改变,它所指向的值也不能改变。要声明一个指向常量的常指针,二者都要声明为const。例如:constchar*constpc="abcd";//指向常量的常指针2.3.7void型指针例2.8void型指针的使用。#include<iostream.h>main(){void*pc;inti=456;charc=a;pc=&i;cout<<*(int*)pc<<endl;pc=&c;cout<<*(char*)pc<<endl;return0;}2.3.8内联函数例2.9内联函数的使用 #include<iostream.h> inlinedoublecircle(doubler)//内联函数 {return3.1416*r*r;} intmain() { for(inti=1;i<=3;i++) cout<<"r="<<i<<"area="<<circle(i)<<endl; return0; }2.3.9带有缺省参数值的函数
例如有一函数原型说明为:intinit(intx=5,inty=10);则x与y的缺省值分别为5与10。以下的函数调用都是允许的:init(100,80);//x=100,y=80init(25);//x=25,y=10init();//x=5,y=102.3.10函数重载
在C++中,只要函数参数的类型不同,或者参数的个数不同,或者二者兼而有之,两个或者两个以上的函数可以使用相同的函数名。例2.13参数类型不同的重载函数 #include<iostream.h> intcube(inti) {returni*i*i;} floatcube(floatf) {returnf*f*f;} doublecube(doubled) {returnd*d*d;} intmain() {inti=12; floatf=3.4; doubled=5.67; cout<<i<<*<<i<<*<<i<<=<<cube(i)<<endl; cout<<f<<*<<f<<*<<f<<=<<cube(f)<<endl; cout<<d<<*<<d<<*<<d<<=<<cube(d)<<endl; return0;}2.3.11作用域标识符∷例2.16使用作用域标识符的情况。 #include<iostream.h> intavar; main(){ intavar; avar=25;//局部变量avar::avar=10;//全局变量avar cout<<"localavar="<<avar<<endl; cout<<"globalavar="<<::avar<<endl; return0; }程序运行结果如下:localavar=25globalavar=102.3.12无名联合union{inti;floatf;}在此无名联合中,声明了变量i和f具有相同的存储地址。2.3.13强制类型转换
在C中如果要把一个整数(int)转换为浮点数(float),要求使用如下的格式:inti=10;floatx=(float)i;C++支持这样的格式,但上面的语句可改写成:inti=10;floatx=float(i);2.3.14new和delete运算符new用于内存分配的最基本的语法形式为:指针变量=new类型名;运算符delete用于释放new分配的存储空间。其基本的语法形式为:delete指针变量;例2.17操作符new和delete的使用。#include<iostream.h>main(){int*p;//声明一个整型指针变量pp=newint;//动态分配一个存放int型数据的内存空间,并将首地址赋给p*p=10;cout<<*p;deletep;//释放指针变量p指向的内存空间return0;}2.3.15引用1.引用的概念引用通常被认为是某个变量的别名,声明一个引用的格式如下:数据类型&引用名=已定义的变量名;例如:inti=5;int&j=i;这里,j是一个整数类型的引用,用整型变量i对它进行初始化,这时j就可看作是变量i的别名。
例2.22引用的使用。
#include<iostream.h>voidmain(){inti;int&j=i;i=30;cout<<"i="<<i<<"j="<<j<<"\n";j=80;cout<<"i="<<i<<"j="<<j<<"\n";cout<<"Addressofi"<<&i<<"\n";cout<<"Addressofj"<<&j<<"\n";}2.引用作函数参数例2.25采用“引用参数”传递函数参数#include<iostream.h>voidswap(int&m,int&n){inttemp;temp=m;m=n;n=temp;}main(){inta=5,b=10;cout<<"a="<<a<<"b="<<b<<endl; swap(a,b); cout<<"a="<<a<<"b="<<b<<endl; return0;}3.用引用返回值例2.27用引用返回函数的值。#include<iostream.h>intA[10];int&array(inti);voidmain(){inti,number;A[0]=0;A[1]=1;cin>>number;for(i=2;i<number;i++){array(i)=array(i-2)+array(i-1);cout<<"array("<<i<<")="<<array(i)<<endl;}}int&array(inti){returnA[i];}课后总结:这次课主要介绍了C++中非面向对象的一些基本结构。应和C程序联系起来讲解。C++基础(2)——学习C++的一些基础知识(实训)教学目的:要求学生学习C++的一些基本知识C++与C一些联系。教学重点、难点:C++程序的结构、C++与C的一些联系。课时安排:二课时(第1、2课时)教学手段:使用计算机多媒体设备进行教学,使用计算机设备进行实践训练。教学过程:上机方法和步骤按照图片录入程序,然后进行程序改错,完成后保存至d:\计0801\自己姓名\中:课后总结:这次课练习的是C++的基本程序结构和非面向对象的结构。为以后学习面向对象的类的知识打下基础。类和对象(一)——学习类的构成教学目的:要求学生掌握C++中类的操作。教学重点、难点:类的定义声明。课时安排:二课时(第1、2课时)教学手段:使用计算机多媒体设备进行教学,使用计算机设备进行实践训练。教学过程:3.1类的构成3.1.1从结构到类3.1.2类的构成类声明的一般格式如下::class类名{public:公有数据成员;公有成员函数;protected:保护数据成员;保护成员函数;private:私有数据成员;私有成员函数;};用一个类来描述日期,其形式如下:classDate{public: voidsetDate(inty,intm,intd); voidshowDate();private:intyear;intmonth;intday;};3.2成员函数的声明成员函数的声明通常采用以下两种方式:(1)将成员函数以普通函数的形式进行说明,这种成员函数在类外定义的一般形式是:返回类型类名∷成员函数名(参数表){//函数体}例如,以下是表示坐标点的类Coord的声明。classCoord{public:voidsetCoord(int,int);//设置坐标点intgetx();//取x坐标点intgety();//取y坐标点private:intx,y;};voidCoord∷setCoord(inta,intb){x=a;y=b;}intCoord::getx(){returnx;}intCoord::gety(){returny;}
(2)将成员函数以内联函数的形式进行说明。在C++中,可以用下面两种格式将成员函数声明为类的内联函数:①隐式声明直接将函数声明在类内部。例如:classCoord{public:voidsetCoord(inta,intb){x=a;y=b;}intgetx(){returnx;}intgety(){retruny;}private:intx,y;};②显式声明这种成员函数在类外定义的一般形式是:inline返回类型类名::成员函数名(参数表){//函数体}例如上面的例子改为显式声明可变成如下形式:classCoord{public:voidsetCoord(int,int);intgetx();intgety();private:intx,y;};inlinevoidCoord::setCoord(inta,intb){x=a;y=b;}inlineintCoord::getx(){returnx;}inlineintCoord::gety(){returny;}3.3对象的定义和使用3.3.1类与对象的关系
通常我们把具有共同属性和行为的事物所构成的集合叫做类。在C++中,可以把相同数据结构和相同操作集的对象看成属于同一类。3.3.2对象的定义(1)在声明类的同时,直接定义对象,即在声明类的右花括号¡°}¡±后,直接写出属于该类的对象名表。例如:classCoord{public:voidsetCoord(int,int);intgetx();intgety();private:intx,y;}op1,op2;(2)声明了类之后,在使用时再定义对象,定义的格式与一般变量的定义格式相同,例如:classCoord{//¡};//¡main(){Coordop1,op2;//¡}3.3.3对象中成员的访问在类的外部可以通过类的对象进行访问,访问的一般形式是:对象名.数据成员名或对象名.成员函数名(参数表)其中“.”叫做对象选择符,简称点运算符。3.3.4类成员的访问属性类成员有三种访问属性:公有(public)、私有(private)和保护(protected)。•说明为公有的成员不但可以被类中成员函数访问;还可在类的外部,通过类的对象进行访问。•说明为私有的成员只能被类中成员函数访问,不能在类的外部,通过类的对象进行访问。•说明为保护的成员除了类本身的成员函数可以访问外,该类的派生类的成员也可以访问,但不能在类的外部,通过类的对象进行访问。3.3.5对象赋值语句例3.5用对象赋值语句的例子。#include<iostream.h>classabc{ public:voidinit(inti,intj){a=i;b=j;}voidshow(){cout<<a<<""<<b<<endl;} private:Inta,b;}; main() {abco1,o2; o1.init(12,34); o2=o1;//将对象o1数据成员的值赋给对象o2 o1.show(); o2.show(); return0; }3.3.6类的作用域所谓类的作用域就是指在类声明中的一对花括号所形成的作用域。一个类的所有成员都在该类的作用域内,一个类的任何成员可以访问该类的其他成员。而在类的外部,对该类的数据成员和成员函数的访问则要受到一定的限制,有时甚至是不允许的,这体现了类的封装功能。课后总结:这次课学习的重点是C++中类的基本操作。这是各个C++面向对象程序设计的重点也是基础。所以一定要每们同学都过关。类和对象(一)——学习类的构成(实训)教学目的:要求学生掌握C++中类的操作。教学重点、难点:类的定义声明。课时安排:二课时(第1、2课时)教学手段:使用计算机多媒体设备进行教学,使用计算机设备进行实践训练。教学过程:上机操作步骤:将如下代码录入至d:\计0801\自己姓名\中。1.#include<iostream.h>classTime{public:inthour;intminute;intsec;};intmain(){Timet1;Time&t2=t1;cin>>t2.hour;cin>>t2.minute;cin>>t1.sec;cout<<t1.hour<<":"<<t1.minute<<":"<<t2.sec<<endl;}2.#include<iostream.h>classTime{public:inthour;intminute;intsec;};intmain(){Timet1;cin>>t1.hour;cin>>t1.minute;cin>>t1.sec;cout<<t1.hour<<":"<<t1.minute<<":"<<t1.sec<<endl;Timet2;cin>>t2.hour;cin>>t2.minute;cin>>t2.sec;cout<<t2.hour<<":"<<t2.minute<<":"<<t2.sec<<endl;return0;}3.//错误修改#include<iostream.h>classStudent{charname[10]; intage; floataver; voidprintStu();};voidmain(){ Studentp1,p2,p3; p1.age=30;//此处有错误}4.//错误修改#include<iostream.h>classStudent{intsno; intage; voidprintStu(); voidsetSno(intd);};voidprintStu(){cout<<"\nStudentNo.is"<<sno<<",";cout<<"ageis"<<age<<"."<<endl;}voidsetSno(ints){sno=s;}voidsetAge(inta){age=a;}voidmain(){Studentlin;lin.setSno(20021); lin.setAge()20; lin.printStu();}以下程序自己运行查看结果。#include<iostream.h>classPoint{public:Point(float=0,float=0);voidsetPoint(float,float);floatgetX()const{returnx;}floatgetY()const{returny;}friendostream&operator<<(ostream&,constPoint&);protected:floatx,y;};Point::Point(floata,floatb){x=a;y=b;}voidPoint::setPoint(floata,floatb){x=a;y=b;}ostream&operator<<(ostream&output,constPoint&p){output<<"["<<p.x<<","<<p.y<<"]"<<endl;returnoutput;}classCircle:publicPoint{public:Circle(floatx=0,floaty=0,floatr=0);voidsetRadius(float);floatgetRadius()const;floatarea()const;friendostream&operator<<(ostream&,constCircle&);protected:floatradius;};Circle::Circle(floata,floatb,floatr):Point(a,b),radius(r){}voidCircle::setRadius(floatr){radius=r;}floatCircle::getRadius()const{returnradius;}floatCircle::area()const{return3.14159*radius*radius;}ostream&operator<<(ostream&output,constCircle&c){output<<"Center=["<<c.x<<","<<c.y<<"],r="<<c.radius<<",area="<<c.area()<<endl;returnoutput;}classCylinder:publicCircle{public:Cylinder(floatx=0,floaty=0,floatr=0,floath=0);voidsetHeight(float);floatgetHeight()const;floatarea()const;floatvolume()const;friendostream&operator<<(ostream&,constCylinder&);protected:floatheight;};Cylinder::Cylinder(floata,floatb,floatr,floath):Circle(a,b,r),height(h){}voidCylinder::setHeight(floath){height=h;}floatCylinder::getHeight()const{returnheight;}floatCylinder::area()const{return2*Circle::area()+2*3.14159*radius*height;}floatCylinder::volume()const{returnCircle::area()*height;}ostream&operator<<(ostream&output,constCylinder&cy){output<<"Center=["<<cy.x<<","<<cy.y<<"],r="<<cy.radius<<",h="<<cy.height<<"\narea="<<cy.area()<<",volume="<<cy.volume()<<endl;returnoutput;}intmain(){Cylindercy1(3.5,6.4,5.2,10);cout<<"\noriginalcylinder:\nx="<<cy1.getX()<<",y="<<cy1.getY()<<",r="<<cy1.getRadius()<<",h="<<cy1.getHeight()<<"\narea="<<cy1.area()<<",volume="<<cy1.volume()<<endl;cy1.setHeight(15);cy1.setRadius(7.5);cy1.setPoint(5,5);cout<<"\nnewcylinder:\n"<<cy1;Point&pRef=cy1;cout<<"\npRefasapoint:"<<pRef;Circle&cRef=cy1;cout<<"\ncRefasaCircle:"<<cRef;return0;}课后总结:类的基本操作已经掌握。但是还是有少数同学没有弄懂。类和对象(一)——学习类的基本操作教学目的:要求学生掌握C++中类的操作(构造函数、析构函数)。教学重点、难点:构造函数、析构函数。课时安排:二课时(第1、2课时)教学手段:使用计算机多媒体设备进行教学,使用计算机设备进行实践训练。教学过程:3.4构造函数与析构函数构造函数和析构函数都是类的成员函数,但它们都是特殊的成员函数,执行特殊的功能,不用调用便自动执行,而且这些函数的名字与类的名字有关。3.4.1构造函数构造函数是一种特殊的成员函数,它主要用于为对象分配空间,进行初始化。构造函数具有一些特殊的性质:(1)构造函数的名字必须与类名相同。(2)构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。(3)构造函数是特殊的成员函数,函数体可写在类体内,也可写在类体外。(4)构造函数可以重载,即一个类中可以定义多个参数个数或参数类型不同的构造函数。(5)构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调用,它是在定义对象的同时被调用的。通常,利用构造函数创建对象有以下二种方法:
(1)利用构造函数直接创建对象.其一般形式为:类名对象名[(实参表)];这里的“类名”与构造函数名相同,“实参表”是为构造函数提供的实际参数。(2)利用构造函数创建对象时,通过指针和new来实现。其一般语法形式为:类名*指针变量=new类名[(实参表)];例如:Date*date1=newDate(1998,4,28);就创建了对象(*date1)。3.4.2成员初始化表带有成员初始化表的构造函数的一般形式如下:类名::构造函数名([参数表])[:(成员初始化表)]{//构造函数体}成员初始化表的一般形式为:数据成员名1(初始值1),数据成员名2(初始值2),……3.4.3缺省参数的构造函数例3.11#include<iostream.h>classCoord{ public: Coord(inta=0,intb=0){x=a;y=b;}//带有缺省参数的构造函数 intgetx(){returnx;}intgety(){returny;}private:intx,y;}; voidmain() {Coordop1(5,6);Coordop2(5);Coordop3; inti,j; i=op1.getx();j=op1.gety(); cout<<"op1i="<<i<<"op1j="<<j<<endl; i=op2.getx();j=op2.gety(); cout<<"op2i="<<i<<"op2j="<<j<<endl;i=op3.getx();j=op3.gety(); cout<<"op3i="<<i<<"op3j="<<j<<endl;} 3.4.4析构函数析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,如释放分配给对象的内存空间等。析构函数有以下一些特点:①析构函数与构造函数名字相同,但它前面必须加一个波浪号(~);②析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数;③当撤消对象时,编译系统会自动地调用析构函数。3.4.5缺省的构造函数和缺省的析构函数1.缺省的构造函数在实际应用中,如果没有给类定义构造函数,则编译系统自动地生成一个缺省的构造函数。其格式如下:类名::缺省构造函数名(){}2.缺省的析构函数每个类必须有一个析构函数。若没有显式地为一个类定义析构函数,编译系统会自动地生成一个缺省的析构函数,其格式如下:类名::析构函数名(){}3.4.6重载构造函数例3.17重载构造函数应用例程。#include<iostream.h>classDate{public:Date();//无参数的构造函数 Date(inty,intm,intd);//带有参数的构造函数 voidshowDate();private:intyear,month,day;};Date::Date(){year=1998;month=4;day=28;}Date::Date(inty,intm,intd){year=y;month=m;day=d;}inlinevoidDate::showDate(){cout<<year<<"."<<month<<"."<<day<<endl;}3.4.7拷贝构造函数拷贝构造函数是一种特殊的构造函数,其形参是本类对象的引用。其作用是使用一个已经存在的对象去初始化另一个同类的对象。拷贝构造函数具有以下特点:(1)因为该函数也是一种构造函数,所以其函数名与类名相同,并且该函数也没有返回值类型。(2)该函数只有一个参数,并且是同类对象的引用。(3)每个类都必须有一个拷贝构造函数。程序员可以根据需要定义特定的拷贝构造函数,以实现同类对象之间数据成员的传递。如果程序员没有定义类的拷贝构造函数,系统就会自动生成产生一个缺省的拷贝构造函数。1.自定义拷贝构造函数自定义拷贝构造函数的一般形式如下:类名::类名(类名&对象名){//拷贝构造函数的函数体}2.缺省的拷贝构造函数如果没有编写自定义的拷贝构造函数,C++会自动地将一个已存在的对象复制给新对象,这种按成员逐一复制的过程由是缺省拷贝构造函数自动完成的。3.调用拷贝构造函数的三种情况(1)当用类的一个对象去初始化该类的另一个对象时。如例3.20主函数main()中的下述语句: Coordp2(p1);//用对象p1初始化对象p2,拷贝构造函数被调用(代入法) Coordp3=p1;//用对象p1初始化对象p3,拷贝构造函数被调用(赋值法)这时需要调用拷贝构造函数。(2)当函数的形参是类的对象,调用函数,进行形参和实参结合时。例如://…fun1(Coordp)//函数的形参是类的对象{p.print();}main(){Coordp1(10,20);fun1(p1);//当调用函数,进行形参和实参结合时,调用拷贝构造函数return0;}(3)当函数的返回值是对象,函数执行完成,返回调用者时。例如://…Coordfun2(){Coordp1(10,30);returnp1;//函数的返回值是对象}main(){Coordp2;P2=fun2();//函数执行完成,返回调用者时,调用拷贝构造函数return0;}课后总结:这次课重点介绍了C++中非常重要的两个概念:构造函数和析构函数。应强加练习。类和对象(一)——学习类的基本操作(实训)教学目的:要求学生掌握C++中类的操作(构造函数、析构函数)。教学重点、难点:构造函数、析构函数。课时安排:二课时(第1、2课时)教学手段:使用计算机多媒体设备进行教学,使用计算机设备进行实践训练。教学过程:上机操作步骤:将如下代码修改无误后保存至d:\计0801\自己姓名\中。1//构造函数错误修改#include<iostream.h>classP{public:intx,y;private: P(){x=1,y=2;}};voidmain(){Pc;c.x=2;}//修改完成之后,自己添加代码将对象c的x和y当前的内容显示出来。2.//构造函数错误修改#include<iostream.h>classStack{public: Stack(intsz);private: char*p; intsize;};Stack::Stack(intsz){p=newchar[size=sz];}voidmain(){ Stackstt;}3.//计算器类的定义,请将代码补充完整。。。。(将中文有代码翻译过来即可)#include<iostream.h>classcount{public://构造函数count()的原型说明//成员函数jia()的原型说明//成员函数jian()的原型说明//成员函数get()的原型说明//成员函数print()的原型说明private://声明一个私有的整型变量value};/*定义构造函数count()函数体的内容是将定义对象时候的参数传递给私有数据成员value*//*定义成员函数jia()函数体的内容是将私有数据成员value的值自增一个单位*//*定义成员函数jian()函数体的内容是将私有数据成员value的值自减一个单位*//*定义成员函数get()函数体的内容是返回value的值*//*定义成员函数print()函数体的内容是将私有数据成员value的值显示出来*/voidmain(){//定义一个对象a初始化参数为1//调用对象a的jia()函数,使得value发生变化,自增一个单位//调用对象a的print()函数,将value的值显示在屏幕上//调用对象a的jian()函数,使得value发生变化,自减一个单位//调用对象a的print()函数,将value的值显示在屏幕上}4.//构造函数的重载,请将代码补充完整。。。。(将中文有代码翻译过来即可)#include<iostream.h>classdate{public://构造函数date()的原型说明,注意要考虑等下要接收三个参数月日年//构造函数date()的原型说明,注意此原型说明中没有任何参数//成员函数show()的原型说明,private://声明三个私有的整型变量月日年};/*定义构造函数date()注意:这个构造函数中应有三个参数函数体的内容是将三个参数传递给三个私有数据成员月日年*//*定义构造函数date()注意:这个构造函数中没有任何参数函数体的内容是接收用户输入的三个参数,并传递给三个私有数据成员月日年*//*定义成员函数show()函数体的内容是将三个私有的数据成员月日年显示出来*/voidmain(){//定义一个对象a,注意:在定义的时候带上三个参数月日年。//定义一个对象b,注意:在定义的时候没有任何参数。//调用对象a的show()函数//调用对象b的show()函数}5.//自己考虑。。。#include<iostream.h>classd{public: d(inti):mem2(i),mem1(mem2+1){ cout<<"mem1is:"<<mem1<<endl;cout<<"mem2is:"<<mem2<<endl; } ~d() {cout<<"distruction"<<endl;};private: intmem1; intmem2;};voidmain(){dd(5);/*为什么在主函数main()中没有任何的显示语句cout,却在最后的结果中有三行显示结果,这三条显示语句是在程序的什么位置被执行。为什么不显示65,下节课提问。*/}课后总结:题目稍难,不过也有一半同学能独立完成。最后一题的答案为:mem1在mem2之前定义出来。类和对象(二)——学习类中的一些数据成员教学目的:要求学生熟悉C++中类的(基本数据结构)。教学重点、难点:对象指针、向函数传递对象。课时安排:二课时(第1、2课时)教学手段:使用计算机多媒体设备进行教学,使用计算机设备进行实践训练。教学过程:4.1自引用指针this例4.1this指针的引例。#include<iostream.h>classA{public:A(intx1){x=x1;}voiddisp(){cout<<"x="<<x<<endl;}private:intx;};main(){Aa(1),b(2);cout<<"a:";a.disp();cout<<"b:";b.disp();return0;}例4.2显示this指针的值。#include<iostream.h>classA{public:A(intx1){x=x1;}voiddisp(){cout<<"\nthis="<<this<<"whenx="<<this->x;}private:intx;};main(){Aa(1),b(2),c(3);a.disp();b.disp();c.disp();return0;}4.2对象数组与对象指针4.2.1对象数组
所谓对象数组是指每一数组元素都是对象的数组,。定义一个一维数组的格式如下:类名数组名[下标表达式];例4.4对象数组的应用。 #include<iostream.h> classexam{ public: voidset_x(intn){x=n;} intget_x(){returnx;}private: intx; };main() {examob[4]; inti; for(i=0;i<4;i++)ob[i].set_x(i); for(i=0;i<4;i++)cout<<ob[i].get_x()<<′′;cout<<endl; return0;}};4.2.2对象指针1.用指针访问单个对象成员声明对象指针的一般语法形式为:类名*对象指针名;当用指向对象的指针来访问对象成员时,要用“->”操作符。例4.7对象指针的使用。 #include<iostream.h> classexe{ public: voidset_a(inta){x=a;} voidshow_a(){cout<<x<<endl;} private
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南美术统考试题及答案
- 新余学院《档案管理学》2025-2026学年期末试卷
- 合肥职业技术学院《临床微生物学及检验》2025-2026学年期末试卷
- 芜湖医药健康职业学院《口腔医学导论》2025-2026学年期末试卷
- 江西理工大学《工程造价管理与编制》2025-2026学年期末试卷
- 河北初中理综试题及答案
- 长春中医药大学《口腔医学导论》2025-2026学年期末试卷
- 福州英华职业学院《网络零售学》2025-2026学年期末试卷
- 厦门演艺职业学院《会展战略管理》2025-2026学年期末试卷
- 固定资产考试试题及答案
- 自助洗车店装修施工方案
- 2026年新乡职业技术学院单招职业技能考试必刷测试卷附答案
- 混凝土切割绳锯施工方案
- 【语文】广东省佛山市顺德区北滘镇中心小学小学五年级下册期末试卷
- 新能源汽车充电站项目委托代建及运营协议
- 2025年安徽专升本c语言考试真题及答案
- 钳工基础知识培训课件图片
- 部队被装供应管理课件
- 精神卫生医疗机构及精神防治技术管理机构调查表格
- 2025年事业编纪委监委面试题及答案
- 公司客户文件管理办法
评论
0/150
提交评论