C++面向对象程序设计实验指导书Word下载.docx
- 文档编号:20973432
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:82
- 大小:1,017.06KB
C++面向对象程序设计实验指导书Word下载.docx
《C++面向对象程序设计实验指导书Word下载.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计实验指导书Word下载.docx(82页珍藏版)》请在冰豆网上搜索。
另外本书还安排了第三部分—综合练习,作为学生提高部分,学生通过第三部分的练习不仅可以巩固前面学到的基本知识,还可以扩充相关方面的程序设计知识,更为重要的是可以让学生自主地设计一个完整的系统,从而达到提高学生综合程序设计能力的目的。
0.3如何使用本书
面向对象程序设计语言出现的目的就是为了设计大型的软件系统,但是教学过程中很难让学生在课堂上实现一个大型的(甚至是成型)的系统,所以作为教师应该引导学生在实现一个简单的功能性的程序的同时让学生思考,思考如何把这个地方的技术实现到一个复杂的应用系统中去;
另外教师要充分利用本书中第二部分的练习,引导学生去思考如何利用C++的相关技术从头到尾设计一个具有实用价值的应用程序。
作为学生如果只是简单地按照本书中提供的步骤一步一步完成某一个程序,而不去思考为什么要这样做的话,那么学生能学到的知识也仅仅是C++的语法而已,并不能真正理解C++面向对象的思想,最终不能设计出好的程序来。
所以学生不仅要全部实现本书中的课堂练习,得出正确的结果,而且在完成了程序后还要思考本程序为什么要这样设计,如果换成其它的程序设计语言会怎么实现,只有这样才能够真正理解C++的精髓,从而掌握C++。
另外学生在学习最后四个实验的时候一定不要忘记前面C++语法知识,能否合理地将C++的三大特性运用到MFC的程序设计中是提高程序运行效率,存储效率和程序封装性一个最有效的手段。
学生在设计本实验指导书第三部分程序的时候,需要自己查阅相关方面的技术资料才能完成相关功能,因为安排这部分的目的就是为了提升学生自主学习的能力和综合程序设计能力,因此这部分的内容并没有安排相关理论知识的讲解。
另外教师也可以把这部分的内容用于学生课程设计的程序设计题目。
注:
本书中所有的程序都采用VC++6.0(英文版)编程环境,并且全部在该环境下编译运行通过!
实验一C++基础
1.1实验目的
1.进一步了解和熟悉VC++6.0开发环境,学会在VC++6.0环境下调试程序;
2.熟悉C++中简单的标准输入输出函数的实用;
3.理解const修饰符的作用,并学会应用const修饰符;
4.理解内置(内联)函数的优缺点并学会使用内置函数;
5.理解和使用函数重载以及带默认参数的函数;
6.使用new和delete进行动态内存管理;
7.理解和使用引用。
1.2实验内容
1.2.1程序阅读
1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
#include<
iostream.h>
intmax_def(intx,inty)
{
return(x>
y?
x:
y);
}
intmax_def(intx,inty,intz)
inttemp=0;
return(temp=(x>
y))>
z?
temp:
z;
doublemax_def(doublex,doubley)
intmain()
intx1=0;
intx2=0;
doubled1=0.0;
doubled2=0.0;
x1=max_def(5,6);
x2=max_def(2,3,4);
d1=max_def(2.1,5.6);
d2=max_def(12.3,3.4,7.8);
-----------------------------------------------------①
cout<
<
"
x1="
x1<
endl;
x2="
x2<
d1="
d1<
d2="
d2<
--------------------------------------------------------②
return1;
问题一:
上述程序的输出结果是什么?
问题二:
哪些情况可以参与函数的重载?
问题三:
①处调用的是哪个函数?
问题四:
②处的输出结果为什么是d2=12,而不是d2=12.3?
2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
int*p1=newint;
-----------------------------------------------------①
int*p2=newint(0);
-----------------------------------------------------②
char*p3=newchar[64];
-----------------------------------------------------③
①、②、③处动态申请内存分别代表什么不一样的意思?
该程序存在什么隐患?
改正该程序使隐患消除。
3.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
voidswap(inta,intb)
inttemp=a;
a=b;
b=temp;
voidswap(int*a,int*b)
inttemp=*a;
*a=*b;
*b=temp;
inti=5;
intj=10;
Beforeswap:
i="
i<
j="
j<
swap(i,j);
Afterthefirstswap:
swap(&
i,&
j);
Afterthesecondswap:
①处函数调用后并不能实现两个数的交换,而②处却可以,为什么?
②处调用的是哪个重载函数?
1.2.2程序设计
1.使用函数重载的方法定义两个重名函数,分别求出整形数平面间两点间距离和双精度平面间两点间距离,如果没有输入第二点的坐标则默认为圆点(0,0)。
2.设计一个函数:
exchange(floatx,floaty,floatz),当调用exchange(a,b,c)时,将a的内容赋值给b,b的内容赋值给c,c的内容赋值给a,要求采用引用的方式来实现。
1.3思考题
1.自己设计一个程序,测试const的三种用法:
指向常量的指针,常指针,指向常量的常指针。
2.编写一个函数,实现两个字符串变量的交换,要求参数用引用。
实验二类和对象—类的构建
2.1实验目的
1.类的定义;
2.类对象的使用;
3.类成员变量的定义和使用;
4.类成员函数的定义和使用;
5.理解类的作用域;
6.理解类的声明;
7.理解类中private和public权限的声明依据。
2.2实验内容
2.2.1程序阅读
classCDate
voidSet(intm,intd,inty)
{
month=m;
day=d;
year=y;
}
intIsLeapYear()
return(year%4==0&
&
year%100!
=0)||(year%400==0);
public:
voidPrint()
cout<
month<
/"
day<
year<
private:
intmonth;
intday;
intyear;
};
voidmain()
CDatea;
a.Set(10,15,2007);
a.Print();
以上程序编译能通过吗,为什么,应该如何改正?
类CDate中分别有哪些成员函数和成员变量,它们分别属于哪种访问权限?
①处语句的意思是什么?
intmonth;
//全局变量
intday;
intyear;
voidSet(intm,intd,inty)-----------------------------------------------------a
:
:
month=m;
day=d;
year=y;
voidSet(intm,intd,inty)-----------------------------------------------------b
{
:
Set(m,d,y);
//成员变量
①处是在给成员变量赋值,还是在给全局变量赋值,如果去掉域作用符:
,程序是否还能正确运行?
②处调用的哪个函数,如果去掉域作用符:
该程序的输出结果是什么,试解释该输出结果。
2.2.2程序设计
1.试设计一个复数类,该类有实部和虚部两个成员数据,成员数据采用私有访问权限,同时该类有两个共有成员函数,分别用来设置成员数据和输出成员数据,在主函数中分别采用对象方式,指针方式和引用方式来调用该类的公有函数设置和输出成员数据。
2.3思考题
1.试指出以下程序的错误,并改正之。
classCPoint
unsignedx,
unsignedy;
boolIsInCircle(CCircle*Circle)
return(((x-Circle->
Center.x)*(x-Circle->
Center.x)
+(y-Circle->
Center.y)*(y-Circle->
Center.y))<
=Circle->
Radius*Circle->
Radius);
classCCircle
unsignedRadius;
CPointCenter;
实验三类和对象—构造函数与析构函数
3.1实验目的
1.理解掌握this指针的作用和用法;
2.理解掌握构造函数的定义和作用;
3.掌握构造函数的使用;
4.理解掌握拷贝构造函数的定义和使用;
5.理解掌握构造函数的重载;
6.理解掌握析构函数的定义和使用。
3.2实验内容
3.2.1程序阅读
voidSet(intx,inty);
voidPrint();
intx;
inty;
voidCPoint:
Set(intx,inty)
x=x;
y=y;
Print()
x="
x<
y="
y<
CPointpt;
pt.Set(10,20);
pt.Print();
以上程序编译能通过吗,试解释该程序?
以上程序的运行结构是否正确,如果不正确,试分析为什么,应该如何改正?
classCPerson
CPerson();
intage;
char*name;
CPerson:
CPerson()
voidCPerson:
name="
name<
age="
age<
CPersonps(23,"
张三"
);
ps.Print();
以上程序存在三处大错误,在不改变主函数内容的前提下,试改正该程序。
3.2.2程序设计
1.设计实现一个CPoint类,满足以下要求:
a.该类包含两个整型成员变量x(横坐标)和y(纵坐标),以及一个输出函数Print()用来输出横坐标和纵坐标,要求不可以在类的外部直接访问成员变量;
b.可以采用没有参数的构造函数初始化对象,此时的成员变量采用默认值0;
c.可以采用直接输入参数的方式来初始化该类的成员变量;
d.可以采用其它的CPoint对象来初始化该类的成员变量;
e.设计一个主函数来测试以上功能。
3.3思考题
1.设计一个CStudent(学生)类,并使CStudent类具有以下特点:
a.该类具有学生姓名、学号、程序设计、信号处理、数据结构三门课程的成绩;
b.学生全部信息由键盘输入,以提高程序的适应性;
c.通过成员函数统计学生平均成绩,当课程数量增加时,成员函数无须修改仍可以求取平均成绩;
d.输出学生的基本信息、各科成绩与平均成绩;
e.学生对象的定义采用对象数组实现;
f.统计不及格学生人数。
实验四类和对象—对象传递与静态成员
4.1实验目的
1.理解静态成员(静态数据成员、静态成员函数)的作用与使用;
2.理解友元(友元函数、友元类)的作用于使用;
3.理解常类型的使用。
4.2实验内容
4.2.1程序阅读
string.h>
classCStudent
CStudent(char*n,inta);
~CStudent();
staticvoidSetAge(intage);
staticintnTotalObj;
intCStudent:
nTotalObj=0;
CStudent:
CStudent(char*n,inta)
age(a)
intnLen=strlen(n);
name=newchar[nLen+1];
strcpy(name,n);
name[nLen]='
\0'
;
nTotalObj++;
~CStudent()
delete[]name;
nTotalObj--;
voidCStudent:
SetAge(intage)
this->
age=age;
CStudentstu1("
25);
CStudentstr2("
李四"
26);
nTotalObj="
nTotalObj<
以上程序编译能通过吗,为什么?
成员变量nTotalObj在程序中起什么作用,它是如何实现的?
如果规定该程序的主函数和类CStudent中的成员变量的属性不允许改变,应该如何改正该程序?
classCTeacher
CTeacher(char*tn,intta);
~CTeacher();
voidSetStuAge(inta);
CStudentstu;
CTeacher:
CTeacher(char*tn,intta)
age(ta)
intnLen=strlen(tn);
strcpy(name,tn);
~CTeacher()
voidCTeacher:
SetStuAge(inta)
stu.age=a;
CStudentstu("
CTeachertea("
以上程序有两大错误,试指出来,并改正之?
#include"
iostream.h"
classDate
constintyear;
constintmonth;
constintday;
Date(inty,intm,intd);
voidshowdate();
Date:
Date(inty,intm,i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 程序设计 实验 指导书