1、C+实验指导书面向对象程序设计实验指导书面向对象程序设计实验课程组二0一三年三月实验预备 实验环境和工具使用,多文件应用程序的开发过程 3实验一 类与对象 7实验二 运算符重载 9实验三 继承与多态性 12实验四 模板 20实验五 综合应用程序一(选做一个) 23实验六 使用MFC进行可视化编程 25实验七 综合应用程序二(选做一个) 41实验预备 实验环境和工具使用多文件应用程序的开发过程一、实验目的与要求 Visual C+提供了一个集源程序编辑、代码编译与调试于一体的开发环境,这个环境称为集成开发环境,对于集成开发环境的熟悉程度直接影响程序设计的效率,本实验通过学习Visual C+ 6
2、.0界面的常用组成情况,并学习各种常用的窗口、菜单、按钮的意义和功能,并通过一些简单的程序设计,目的是使学生对用户界面、菜单和工具栏有一个全面的了解并掌握主要菜单命令。了解Visual C+集成开发环境的界面组成;理解菜单命令的含义掌握“New:”菜单命令、“Breakpoints”菜单命令、“Build”菜单命令、“Source Brower”菜单命令、工具栏的定制和修改、联机帮助。简单的程序设计二、实验设备与平台 实验设备要求每个学生一台电脑,其中运行环境为VC+ 6.0系统。三、实验内容及步骤1. 上机实验内容Visual C+集成开发环境的用户界面识别;新文件、新工程项目、工作区的创建
3、;设置、查看和删除断点;编译和运行程序;浏览资源信息;工具栏的定制和修改;联机帮助的使用;熟悉Visual C+编写控制台模式程序的方法;上机输入例题,调试并运行,并观察结果;上机编写一个程序 实验1调试并编译程序。在Visual C+下,编写控制台模式的程序和在DOS下编写程序相似,具有简单方便的特点,一般用于后台程序的编写。控制台模式下程序的编写有两种方法,一是创建一个C+源程序文件,二是创建一个控制台模式的工程。 创建一个C+源程序文件1启动Visual C+,单击“File”菜单下的“New”菜单命令,出现“New”对话框。然后选择“Files”选项卡,在此选项卡的左侧,单击“C+ S
4、ource Files”:在选项卡的右侧,选择源程序存放的位置(location)以及源程序文件名(File),然后单击【OK】按钮。注意C+源程序文件的扩展名为.cpp。2在编辑区输入源程序,程序内容如下:#include void main() for(int i=0;i3;i+) coutHello! my friend!n; 3程序输入之后,请认真检查,然后按键或工具栏中的 (Build)按钮或者选择“Build”菜单命令,系统提示是否创建一个默认的工程工作区,单击【是】按钮即可。 4系统开始编译源程序并链接相应的文件,如果没有错误则在集成开发环境下方的状态栏中出现下列提示“0erro
5、r(s),0warning(s)”,此时可以按+键或按下状态栏中的按钮或者选择“Build”菜单的“Excute 1_1.exe”运行程序,然后观察程序运行结果。用户也可以在DOS(Windows98)下或控制台模式下(Windows2000或Windows XP)直接键入文件名“1_1.exe”也可以运行程序。创建一个控制台模式的工程1启动Visual C+,单击“File”菜单下的“New”菜单命令,出现“New”对话框。然后选择“Projects”选项卡,在此选项卡的左侧,单击“Win32 Console Application”;在选项卡的右侧,选择工程文件存放的位置(location
6、)以及工程文件名(Project Name)。然后单击【OK】按钮。2在“Win32 Console Application-Step 1 of 1”对话框中选择应用程序的类型“An empty project”,单击【Finish】按钮。3在集成开发环境的左侧单击“File View”属性页,右键单击“Source Files”,选择“Add Files to Folder”。在“文件名”中填入文件名,此时也可以选择存在的文件。4此时在“Source Files”左侧出现一个加号,单击加号,出现新的源程序文件“1_1.cpp”,双击此文件,在集成开发环境的右侧输入例1_1.5按照创建一个C+
7、源程序文件的第个步骤编译和运行程序。图1-1 向工程中添加源程序文件图1-2 选择添加的源程序文件的文件名与类型实验2:上机输入C+程序设计基础例5-9,例5-10调试并编译程序、运行通过。实验3:上机编写一个程序并运行通过,定义一个Box(盒子)类,在该类定义中包括:数据成员:length(长),width(宽),height(高);成员函数:构造函数Box设置盒子长、宽、高三个初始数据,函数volume计算并输出盒子的体积。在main函数中,要求创建Box对象,并求盒子的体积。实验4:设置、查看和删除断点。打开实验3的工作区文件,此时,可以设置断点。在Visual C+ 6.0中,断点分为
8、位置断点(Location)、数据断点(Data)、消息断点(Message)三种类型。本次实验只练习位置断点的设置、查看和删除。 图1-3 右键单击设置断点a)设置位置断点。有两种方法可以设置位置断点,一是右键单击断点所在行,如图1-4所示,单击“Insert/Remove Breakpoint”,断点所在行会出现红色的圆,标识断点设置成功。二是让光标到达相应位置,然后单击“Edit”菜单的“Breakpoints”命令,出现如图 1-5 所示的“Breakpoints”对话框,在“Break at”处选择断点所在行即可。b)查看位置断点。某行设置断点之后,行首位置有一个红圆,源程序较长时,
9、查看比较麻烦,可以单击“Edit”菜单的“Breakpoints”命令,出现如图1-4所示的“Breakpoints”对话框,在对话框的左下角“Breakpoints”处看到所有的断点。c)删除位置断点。有两种方法可以删除位置断点,一是右键单击断点所在行,单击“Remove Breakpoint”删除断点;二是在如图1-5所示的“Breakpoints”对话框的“Breakpoints”处选择断点,然后选择“Remove”删除断点。 图1-4 “断点”对话框实验5:工具栏的定制和修改。用户可以定制工具栏,只需选择“Tools”、“Customize”、“Toolbars”,如图1-8所示,选择
10、所要定制的工具即可。用户可以根据自己的需要添加新的工具栏,或者对已有工具栏进行修改,如添加新按钮、删除已有按钮等。若需要添加工具栏,只需选择“Tools”、“Customize”、“Toolbars”、“New”选项,然后输入相应的名字即可。实验6:使用联机帮助Visual C+ 6.0 提供了详细的帮助信息,用户安装MSDN之后,可以通过选择集成开发环境中的“Help”菜单下的“Contents”命令就可以进入帮助系统。在源文件编辑器中把光标定位在一个需要查询的单词处,然后按键也可以进入Visual C+ 6.0的帮助系统。 图1-5 定制工具栏实验一 类与对象一、实验目的与要求(1)掌握类
11、和对象的概念、定义和使用方法。(2)掌握不同特性对象成员的访问方法,以及this指针的概念和使用方法。(3)掌握构造函数和析构函数的使用方法。(4)掌握静态成员的使用方法。(5)掌握友员的使用方法。学会使用VC6的Debug的功能跟踪构造函数、析构函数的执行顺序。二、实验设备与平台实验设备要求每个学生一台电脑,其中运行环境为VC+ 6.0系统。三、实验内容及步骤(1) 定义一个score类,其中包括私有数据成员和公有成员函数,即num 学号Math 高等数学成绩English 英语成绩Programming 程序设计成绩inscore() 输入学号和各科成绩,并且计算平均成绩showscore
12、(时) 输出学号和各科成绩使用score类,输入某班n(事先不能确定)个学生的学号和各科成绩,然后求各个学生的平均成绩,并列表输出学生的学号、各科成绩和平均成绩。(2)写出下列程序的执行结果,然后上机进行验证。用VC6的Debug的功能跟踪构造函数、析构函数和成员函数的执行顺序。#include class TESTpublic: TEST() cout 调用构造函数 endl; x = 2; y = 50; z = 9; TEST( int a,int b,int c ) cout 调用重载构造函数 endl; x = a; y = b; z = c; void display() cout
13、 x= x t y= y t z= z b ) return a; else return b; TEST( ) cout 调用析构函数 endl; cout x , y 和 z 最大值是: max( max( x,y ),z) endl; private: int x,y,z;void main() TEST obj1; obj1.display ( ) ; TEST obj2( 33, 20, 80); obj2.display();(3)假设某城市人人所得税的税基为2000元,而其征收个人所得税的规定如下:不超过税基免征税,按超过税基部分征收所得税。超过部分在2000元以下,征税5%;5
14、000元以下,征税10%;10000元以下,征税15%;10000元以上,征税20%。建立一个incomec类,共包含的数据成员和成员函数如下:income数据成员,表示职工的实际收wage静态数据成员,表示职工工资taxrate静态数据成员,表示税率setWage(double m)成员函数,设置工资值getTaxrate()静态成员函数,计算税率calIncome()静态成员函数,计算职工的实际收入在主函数中,实例化不同的incomec类对象,并计算它们的实际收入。(4)建立一个复数类imaginary,其私有数据成员x和y表示复数的实部和虚部,构造函数imaginary用于对复数的实部和
15、虚部初始化,友员函数add,sub,mul和div分别用于进行复数的加、减、乘和除法运算,静态函数show用于显示运算结果。在主函数中,实例化两个复数,并输入一个运算符,按运算符选择相应的友员函数进行复数运算,然后输出运算结果。实验指导(1)对本实验第(1)题,由于事先不知道学生的人数,所以在程序中可以使用动态对象数组来描述每个学生的数据和对学生的数据进行的操作。(2)为跟踪本实验第(2)题程序中的构造函数、析构函数和成员函数的执行,先在Visual C+主窗口中打开源程序文件,并对该程序文件进行编译。然后使用VC6 Debug的F11和F10功能键分步执行并跟踪程序。注意观察构造函数的执行时
16、机。(3)假设有两个复数a+bi和c+di,则复数的加、减、乘和除法运算规定如下(a+bi)+(c-di)=(a+c)+(b+d)i(a+bi)-(c+di)=(a-c)+(b-d)i(a+bi)*(c+di)=(ac-bd)+(bc+ad)i(a+bi)/(c+di)=(ac+bd)/(c2+d2)+(bc-ad)/ (c2+d2)i实验二 运算符重载一、实验目的及要求1、掌握用成员函数重载运算符的方法。2、掌握用友元函数重载运算符的方法。二、实验设备与平台 1、硬件环境:微型计算机,2、软件环境:Visual C+ 6.0; 三、实验内容及步骤 1、重载运算符“”的算法实现。#includ
17、e iostream.hclass Point int x,Y: public: Point(); friend istreamoperator(istream &in, Point &p) ; /重载运算符” friend ostreamoperator(ostream &out, Point &p) ; /重载运算符”(istream &in,Point &p) cout请输入x, y的值:endl ; coutp.x; cout p.y; return in; ostreamoperator(ostream &out,Point &p) out 输出x, y的值 endl ; outxp
18、.x y= p.yP;CountP2、求最后的长方形面积。给出程序的运行结果。#includeiostream.hclass Oblong /定义长方形类 int length, width; /定义长、宽变量 public: Oblong(); /构造函数 Oblong ( int x, int y ) /构造函数 lengthx: widthy: Oblong operator, (Oblong o) ; /声明逗号运算符重载成员函数 Oblong operator + (Oblong o) ; /声明加号运算符重载成员函数void Disp() cout面积:length*width”和
19、“”,使之能用于矩阵相加、输入和输出。四、思考问题及课后练习1、定义一个复数类,通过重载运算符:“*”,“/”,直接实现二个复数之间的乘除运算。编写一个完整的程序,测试重载运算符的正确性。要求乘法*用友元函数实现重载,除法/用成员函数实现重载。分析:两复数相乘的计算公式为:(a+bi)*(c+di)=(ac-bd)+(ad+bc)i 两复数相除的计算公式为:(a+bi)/(c+di)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d)i 2、设计一个学生类Student,包括姓名和三门课的成绩,利用重载运算符“+”将所有学生的成绩放入一个对象中,再对该对象求各门课程的平均分
20、。 3、编写一个时间类,实现时间对象的加、减运算并输出。实验三 继承与多态性一、实验目的及要求1、掌握继承、基类和派生类的概念。2、掌握初始化基类成员的方法。3、掌握派生类对基类的继承。4、学习虚函数和纯虚函数的定义与使用方式。5、理解抽象类的概念,学习如何用指针指向其他的派生类,实现多态性。6、掌握抽象类的定义与使用方式,并注意指针的用法。7、学习如何使用虚函数、纯虚函数、抽象类和实现类的多态性。二、实验设备与平台 1、硬件环境:微型计算机,2、软件环境:Visual C+ 6.0;三、实验内容及步骤 1、定义派生类的实例#include stdafx.h#include string.h#
21、include iostream.hclass STUDENTprotected: char m_no12,m_name11; int m_sex,m_year,m_month,m_day;public: STUDENT() void set(char * no,char * name,int sex,int year,int month,int day) strcpy(m_no,no); strcpy(m_name,name); m_sex=sex; m_year=year; m_month=month; m_day=day; void set_no(char * no) strcpy(m_
22、no,no); void set_name(char * name) strcpy(m_name,name); void set_sex(int sex) m_sex=sex; void set_year(int year) m_year=year; void set_month(int month) m_month=month; void set_day(int day) m_day=day; char * get_no() return m_no; char * get_name() return m_name; int get_sex() return m_sex; int get_ye
23、ar() return m_year; int get_month() return m_month; int get_day() return m_day; ;class CLASS: public STUDENTprotected: int m_c,m_english;public: CLASS() void set_c(int c) m_c=c; void set_english(int english) m_english=english; int get_c() return m_c; int get_english() return m_english; void list() c
24、outn学号:m_no; coutn姓名:m_name; coutn性别:( (m_sex=0) ? 女 : 男); coutn出生日期:m_year年m_month月m_day日; coutnC+:m_c; coutn英语:m_english; ;int main(int argc, char* argv) char str100; int x,i; CLASS s10; for (i=0;i=1;i+) coutstr; si.set_no(str); coutstr; si.set_name(str); coutx; si.set_sex(x); coutx; si.set_year(x
25、); cinx; si.set_month(x); cinx; si.set_day(x); coutx; si.set_c(x); coutx; si.set_english(x); for (i=0;i=1;i+) si.list(); coutnn; return 0;2、多重继承的实例#include stdafx.h#include iostream.hclass BASE1public: void show_i() coutin; protected: int i;class BASE2public: void show_j() coutjn; protected: int j;c
26、lass DERIVED : public BASE1,public BASE2public: void set(int x,int y) i=x; j=y; ;int main(int argc, char* argv) DERIVED obj; obj.set(5,7); obj.show_i(); obj.show_j(); return 0;3、有一个图书馆类,内有数据成员“借书卡号”和“书名”;还有一个学生类,内有数据成员“姓名”。试设计一个读者类,它是图书馆类和学生类的派生类,继承了它们的所有数据成员和成员函数,在此基础上要添加一个查找函数,可根据输入的读者姓名,显示出该读者的相关信息。 程序设计: (1)定义一个图书馆类Library,其主要功能是记录读者的借书卡号和书名。 (2)定义一个学生类Student,它的主要作用是记录读者的姓名。 (3)定义一个通过读者类
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1