《面向对象程序设计》实验指导书 16个实验含参考代码要点.docx

上传人:b****8 文档编号:11287366 上传时间:2023-02-26 格式:DOCX 页数:39 大小:41.43KB
下载 相关 举报
《面向对象程序设计》实验指导书 16个实验含参考代码要点.docx_第1页
第1页 / 共39页
《面向对象程序设计》实验指导书 16个实验含参考代码要点.docx_第2页
第2页 / 共39页
《面向对象程序设计》实验指导书 16个实验含参考代码要点.docx_第3页
第3页 / 共39页
《面向对象程序设计》实验指导书 16个实验含参考代码要点.docx_第4页
第4页 / 共39页
《面向对象程序设计》实验指导书 16个实验含参考代码要点.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

《面向对象程序设计》实验指导书 16个实验含参考代码要点.docx

《《面向对象程序设计》实验指导书 16个实验含参考代码要点.docx》由会员分享,可在线阅读,更多相关《《面向对象程序设计》实验指导书 16个实验含参考代码要点.docx(39页珍藏版)》请在冰豆网上搜索。

《面向对象程序设计》实验指导书 16个实验含参考代码要点.docx

《面向对象程序设计》实验指导书16个实验含参考代码要点

面向对象程序设计

实验指导书

(适用:

电子信息11级)

 

彭召意陶立新编写

 

计算机与通信学院

2014.9

目录

实验一C++基础的应用1

实验二类和对象的应用3

实验三类的构造函数、析构函数的应用4

实验四友员和运算符重载5

实验五类的继承与派生6

实验六类的多态性与虚函数7

附录:

各实验的程序代码8

实验一C++基础的应用

(实验课时:

2实验性质:

设计)

实验名称:

C++基础的应用

实验目的:

(1)进一步学习VC++6.0开发环境及程序调试方法。

(2)练习C++函数的定义及使用;

(3)练习C++数组的定义及使用;

(4)练习C++指针的定义及使用;

(5)练习C++结构体的定义及使用;

(6)练习多文件的程序的编译和运行方法;

实验设备:

(1)硬件:

个人微机(配置不低于:

CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:

操作系统为WindowsXP(或2000、server2003等),工具软件为VisualC++6.0。

实验内容:

(1)熟悉VisualC++6.0编译系统的常用功能,特别是debug调试功能;

(2)编程1:

编写一个程序c1.cpp,用来求2个或3个整数的最大数。

要求:

用重载函数的方法来求最大数;函数原型:

intmax(inta,intb)和intmax(inta,intb,intc)。

(3)编程2:

编写一个程序c2.cpp,求:

a!

+b!

+c!

的值。

要求:

使用递归函数。

主程序和函数分开到两个源程序文件中,分别进行编译后,再运行;

(4)编程3:

有一个3*4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号;

(5)编程4:

建立一个动态链表并进行输出和删除管理。

链表的每个节点为学生信息,包括:

学号,姓名,性别,下一学生信息的指针。

程序的工作:

(a)建立三个学生信息的节点,然后顺序输出该三个学生信息;(b)删除中间的节点,再顺序输出学生信息。

(6)使用debug调试功能:

追踪第2个程序中函数的运行。

(7)思考:

在第2个程序中,如果a,b,c的值较大,则显示的结果会怎样?

这时如何解决此问题?

(提示:

显示的结果会不对,可能还会是负数,定义一个数组来存放最后结果。

 

实验要求:

(1)掌握VisualC++6.0开发环境的常用功能及使用,能进一步使用VisualC++6.0的debug调试功能:

单步调试、设置断点等;

(2)掌握C++函数的定义及使用,掌握函数的嵌套调用和递归调用的方法;

(3)掌握C++数组、指针、结构体的定义及使用;

(4)掌握多文件的程序的编译和运行方法;

(5)程序格式规范,程序运行正确;

(6)认真书写实验报告,如实填写各项实验内容。

实验步骤:

(1)启动VisualC++6.0开发环境;

(2)熟悉VisualC++6.0编译系统的常用功能;

(3)在file菜单中,新建C++源程序c1.cpp;

(4)编辑C++源程序文件c1.cpp的内容。

(5)编译c1.cpp,系统会提示是否创建工程(由于前面没有创建工程),选择“是”。

则创建一个工程;

(6)程序编译正确时,则可建立可执行程序;

(注意观察每步的结果)

(7)运行可执行文件;

(8)关闭工作空间。

(9)对编程2,在file菜单中,新建C++源程序cpp2_1;

(10)编辑C++源程序文件cpp2_1的内容;

(11)编译cpp2_1,系统会提示是否创建工程(由于前面没有创建工程),选择“是”,则创建工程;

(12)在file菜单中,新建C++源程序cpp2_2;

(13)编辑C++源程序文件cpp2_2的内容;

(14)编译文件cpp2_2时,系统提示是否加入到此工程,选择“是”,则把文件cpp2_2加入到该工程中。

(15)编译和运行此程序,并注意观察每步的结果。

(16)使用调试功能:

运行到光标处、单步跟踪、查看变量值。

(17)使用关闭工作空间。

(18)参照上述方法,完成编程3和编程4。

注意:

若编译时出错:

“fatalerrorc1010:

unexpextedendoffilewhilelookingforprecompiledheaderdirective.”;

该文件需要包含头文件:

stdafx.h,即在开头有语句:

#include“stdafx.h”

思考题:

假如已建立了两个C++源程序c1.cpp和c2.cpp。

先用open打开c1.cpp,并完成了编译、连接和运行,再打开c2.cpp,对它进行编译和连接。

此时会出现什么问题?

原因何在?

怎样解决?

实验二类和对象的应用

(实验课时:

2实验性质:

设计)

实验名称:

类和对象的应用

实验目的:

(1)熟悉C++面向对象的程序设计的基本概念;

(2)练习类的定义和对象的创建;

(3)练习对象的成员函数的调用方法以及对象的初始化;

实验设备:

(1)硬件:

个人微机(配置不低于:

CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:

操作系统为WindowsXP(或2000、server2003等),工具软件为VisualC++6.0。

实验内容:

事先编好程序,上机调试和运行程序,分析结果。

(1)编程1:

定义并实现一个简单的学生类:

公有属性为:

学号、姓名、班级,成员函数为输入和显示一个学生的上述信息;

(2)将程序

(1)中的数据成员改为私有的,考虑对程序有何影响;

(3)编程2:

设计一个长方形类 Rectangle。

成员变量包括:

长度和宽度,成员函数有:

Area计算面积,Set设置长方形的长和宽,Get获取长方形的长和宽。

最后,编写一个主程序来测试该类及成员函数。

(4)编程3:

设计一个汽车类Car。

成员变量有:

品牌,颜色,车门,车灯,行驶速度。

成员函数有:

打开车门、打开车灯、加速、减速等。

最后,编写一个主程序来测试该类及功能。

(提示:

在成员函数中用输出成员函数名来表示该成员函数被调用)

实验要求:

(1)掌握C++类和对象的基本概念;

(2)掌握C++类和对象的定义及使用;

(3)掌握对象的成员函数的调用方法;

(4)程序格式规范,程序运行正确;

(5)认真书写实验报告,如实填写各项实验内容。

实验步骤:

(1)启动VisualC++6.0开发环境;

(2)创建一个项目;

(3)建立C++源程序文件;

(4)编辑C++源程序文件内容;

(5)建立并运行可执行程序;

(6)关闭工作空间。

实验三类的构造函数、析构函数的应用

(实验课时:

2实验性质:

设计)

实验名称:

类的构造函数、析构函数的应用

实验目的:

(1)练习类的构造函数、析构函数的定义和使用方法;

(2)练习对象数组、对象指针的使用;

(3)练习类的静态成员的使用。

实验设备:

(1)硬件:

个人微机(配置不低于:

CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:

操作系统为WindowsXP(或2000、server2003等),工具软件为VisualC++6.0。

实验内容:

(1)编程:

设计一个学生类。

要求:

学生的属性有:

学号,姓名,性别;

学生的行为有:

输入学生的上述属性和输出学生的上述属性。

编写构造函数对学生的所有属性初始化,无参数的构造函数设置学号为1001,姓名为“张三”,性别为‘M’(‘M’代表男,‘F’代表女)。

(2)修改上述程序:

修改定义析构函数,在析构函数中输出学号。

再运行程序,观察运行结果。

(3)修改上述main程序:

使用对象指针,用new生成一个学生对象,然后,用delete清除该对象,使用单步运行观察运行结果。

(4)修改上述程序:

增加一个私有数据成员成绩score;增加一个成员函数readdata:

输入一学生的学号和成绩;增加一个成员函数getscore:

取得学生的成绩。

再修改main函数;定义一个班的同学(假如一个班有10位同学,采用对象数组),输出该班的平均成绩。

(5)不用对象数组,而使用静态的数据成员来实现(4)中求一个班的学生的平均成绩,学生的成绩在构造函数中输入。

(提示:

定义2个静态数据成员,1个是存储总成绩,1个是存储学生人数)。

(6)分别运行上述程序,并分析结果。

注意:

在增加一个新的功能时,可以把暂时不需要的功能代码给注释掉。

实验要求:

(1)掌握C++类的构造函数、析构函数的定义和使用方法;

(2)掌握C++对象数组、对象指针的使用;

(3)掌握类的静态数据成员的定义和使用;

(4)程序格式规范,程序运行正确;

(5)认真书写实验报告,如实填写各项实验内容。

实验步骤:

(1)启动VisualC++6.0开发环境;

(2)创建一个项目;

(3)建立C++源程序文件;

(4)编辑C++源程序文件内容;

(5)建立并运行可执行程序;

(6)关闭工作空间。

实验四友员和运算符重载

(实验课时:

2实验性质:

设计)

实验名称:

友元和运算符重载

实验目的:

(1)进一步了解运算符重载的概念和使用方法;

(2)掌握几种常用的运算符重载的方法;

(3)练习友员函数的定义和使用;

(4)了解转换构造函数的使用方法。

实验设备:

(1)硬件:

个人微机(配置不低于:

CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:

操作系统为WindowsXP(或2000、server2003等),工具软件为VisualC++6.0。

实验内容:

事先编好程序,上机调试和运行程序,分析结果。

(1)有两个矩阵a和b,均为2行3列。

求两个矩阵之和。

重载运算符“+”,使之能用于矩阵相加。

如:

c=a+b。

(2)编写一个友元函数来读取矩阵指定所在行列的值。

(3)定义一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别)。

编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。

可以设想为:

一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分。

实验要求:

(1)掌握C++运算符重载的概念和使用方法;

(2)熟悉转换构造函数的使用方法;

(3)程序格式规范,程序运行正确;

(4)认真书写实验报告,如实填写各项实验内容。

实验步骤:

(1)启动VisualC++6.0开发环境;

(2)创建一个项目;

(3)建立C++源程序文件;

(4)编辑C++源程序文件内容;

(5)建立并运行可执行程序,并分析结果;

(6)关闭工作空间。

实验五类的继承与派生

(实验课时:

2实验性质:

设计)

实验名称:

类的继承与派生

实验目的:

(1)进一步理解继承与派生的概念;

(2)掌握通过继承派生出一个新的类的方法;

实验设备:

(1)硬件:

个人微机(配置不低于:

CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:

操作系统为WindowsXP(或2000、server2003等),工具软件为VisualC++6.0。

实验内容:

事先编好程序,上机调试和运行程序,分析结果。

(1)编程:

编写一个学生类Student。

要求:

学生的保护属性有:

学号(Num),姓名(Name),性别(Sex);

学生的公用成员函数有:

ReadData()用于输入Num、Name、Sex。

OutputData()用于输出Num、Name、Sex。

然后,在学生类的基础上派生出研究生类Graduate,该类新增私有属性研究方向(ResearchD),新增公用成员函数ResearchWork(),该函数功能为输出学号和研究方向。

编写main函数测试基类和派生类的各属性很函数的访问。

修改派生类的派生方式以及基类成员的访问方式,再测试看看基类和派生类的属性访问方式有何不同。

(2)编程:

在上述工程中增加一个Teacher(教师)类,采用多重继承方式由Student和Teacher类公有派生出新类Student_Teacher。

要求:

Teacher类的保护成员有:

Name、Sex、Title(职称)、Wages(工资)。

两个基类中的Name、Sex同名,在引用这些数据成员时,指定作用域。

在派生类Student_Teacher中,增加两个成员函数:

ReadF1()用于读入:

Num、Name、Sex、Title、Wages。

Show()用于输出数据,在Show()中,首先调用Student类的display()函数用于输出Num、Name、Sex,然后再用cout语句输出Title、Wages。

在类体中声明成员函数,在类外定义成员函数。

思考题:

类的三种继承方式的主要区别是什么?

实验要求:

(1)掌握继承与派生的概念;

(2)掌握通过继承派生出一个新的类的方法;

(3)程序格式规范,程序运行正确;

(4)认真书写实验报告,如实填写各项实验内容。

实验步骤:

(1)启动VisualC++6.0开发环境;

(2)创建一个项目;

(3)建立C++源程序文件;

(4)编辑C++源程序文件内容;

(5)建立并运行可执行程序;

(6)关闭工作空间。

实验六类的多态性与虚函数

(实验课时:

2实验性质:

设计)

实验名称:

类的多态性与虚函数

实验目的:

(1)了解多态性的概念;

(2)了解虚函数的作用和使用方法;

(3)了解纯虚函数和抽象类的概念和用法。

实验设备:

(1)硬件:

个人微机(配置不低于:

CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:

操作系统为WindowsXP(或2000、server2003等),工具软件为VisualC++6.0。

实验内容:

事先编好程序,上机调试和运行程序,分析结果。

(1)编程:

定义抽象基类Shape(图形)。

Shape类有一个公共的纯虚函数Area,用于派生类求图形的面积。

(2)由Shape派生出3个派生类:

Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数PrintArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。

在主程序中测试这些类的PrintArea函数。

(3)在类Circle基础上再派生一个圆柱体Cylinder,重载Area函数求圆柱体的体积。

然后,编写主程序采用静态多态性和动态多态性分别测试Area函数。

(4)在类Circle中定义一个析构函数,让它输出一行信息“ThisisCicleDestruction。

”,在类Cylinder中定义一个析构函数,让它输出一行信息“ThisisCylinderDestruction。

”。

在主程序中用指向基类Circle类的指针动态生成Cylinder类对象,然后用delete语句释放该对象,测试看看运行结果如何。

再修改Circle的析构函数为虚函数,测试看看运行结果如何。

(5)运行上述程序,并分析结果。

实验要求:

(1)掌握多态性的概念;

(2)掌握虚函数的作用和使用方法;

(3)掌握纯虚函数和抽象类的概念和用法;

(4)程序格式规范,程序运行正确;

(5)认真书写实验报告,如实填写各项实验内容。

实验步骤:

(1)启动VisualC++6.0开发环境;

(2)创建一个项目;

(3)建立C++源程序文件;

(4)编辑C++源程序文件内容;

(5)建立并运行可执行程序,并分析结果;

(6)关闭工作空间。

思考题:

虚函数的作用是什么?

附录:

各实验的程序代码

实验1:

程序代码

程序1:

#include

usingnamespacestd;

intmain()

{intmax(inta,intb,intc);

intmax(inta,intb);

inta=8,b=-12,c=7;

cout<<"max(a,b,c)="<

cout<<"max(a,b)="<

return0;

}

intmax(inta,intb,intc)

{if(b>a)a=b;

if(c>a)a=c;

returna;

}

intmax(inta,intb)

{if(a>b)returna;

elsereturnb;

}

程序2:

//cpp2_1.cpp

#include

usingnamespacestd;

intmain()

{intfac(int);

inta,b,c,sum=0;

cout<<"entera,b,c:

";

cin>>a>>b>>c;

sum=sum+fac(a)+fac(b)+fac(c);

cout<

+"<

+"<

="<

return0;

}

//cpp2_2.cpp,递归方式

intfac(intn)

{

if(n<=1)return1;

else

return(n*fac(n-1));

}

//cpp2_2.cpp,非递归方式

intfac(intn)

{intf=1;

for(inti=1;i<=n;i++)

f=f*i;

returnf;

}

程序3:

#include

usingnamespacestd;

intmain()

{inti,j,row=0,colum=0,max;

inta[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};

max=a[0][0];

for(i=0;i<=2;i++)

for(j=0;j<=3;j++)

if(a[i][j]>max)

{max=a[i][j];

row=i;

colum=j;

}

cout<<"max="<

return0;

}

程序4:

#include

//#include

usingnamespacestd;

constintn=10;

structstudent

{charnum[6];

charname[8];

charsex;

student*next;

};

intmain()

{inti;

student*head,*p1,*p2;

head=p1=NULL;

for(i=0;i<3;i++)

{

p2=newstudent;

if(p2==NULL)

break;

cout<<"inputstudentinformation:

"<

cout<<"Num:

";

cin>>p2->num;

cout<<"name:

";

cin>>p2->name;

cout<<"sex:

";

cin>>p2->sex;

if(i==0)

{

head=p1=p2;

}

else

{

p1->next=p2;

p1=p2;

}

}

if(p1!

=NULL)p1->next=NULL;

cout<<"Outputinformation:

\n";

p1=head;

i=0;

while(p1!

=NULL)

{

i++;

cout<<"Number"<

cout<<"num:

"<num<<"name:

"<name<<"sex:

"<sex<

p1=p1->next;

}

p1=head->next;

head->next=p1->next;

deletep1;

cout<<"Afterdelete,Outputinformation:

\n";

p1=head;

i=0;

while(p1!

=NULL)

{

i++;

cout<<"Number"<

cout<<"num:

"<num<<"name:

"<name<<"sex:

"<sex<

p1=p1->next;

}

while(head!

=NULL)

{

p1=head->next;

deletehead;

head=p1;

}

return0;

}

思考题:

打开c2.cpp,对它进行编译时,出现提示:

选择“否”,出现提示:

选择“是”,则编译完成。

连接时,出现错误提示:

--------------------Configuration:

Cpp1-Win32Debug--------------------

Linking...

Cpp2.obj:

errorLNK2005:

_mainalreadydefinedinCpp1.obj

Debug/Cpp1.exe:

fatalerrorLNK1169:

oneormoremultiplydefinedsymbolsfound

Errorexecutinglink.exe.

Cpp1.exe-2error(s),0warning(s)

出错原因:

c1工程中有两个main()函数。

解决方法:

关闭c1的工作空间后,再打开c2.cpp。

实验2:

程序代码

(1)定义并实现类student

#include

classstudent//定义类

{public:

//类的公有成员

intNum;

charName[10];

charSclass[20];

voidinputs()

{cin>>Num>>Name>>Sclass;}

voiddisplay()

{cout<<"\n学号:

"<

”<

”<

};

voidmain()//主函数

{studentss;//声明对象

ss.inputs();//调用成员函数

ss.display();

}

(2)程序2

include

usingnamespacestd;

classTime

{public:

voidset_time(void)

{cin>>hour;

cin>>minute;

c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1