面向对象程序设计实验Word文档下载推荐.docx
- 文档编号:18129198
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:27
- 大小:21.13KB
面向对象程序设计实验Word文档下载推荐.docx
《面向对象程序设计实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
12.3,3.4,7.8>
-----------------------------------------------------①
cout<
<
"
x1="
x1<
endl;
x2="
x2<
d1="
d1<
d2="
d2<
--------------------------------------------------------②
return1;
问题一:
上述程序的输出结果是什么?
问题二:
用的是哪个函数?
答:
调用的函数是
问题三:
②处的输出结果为什么是d2=12,而不是d2=12.3?
因为①处调用的是整型函数,d2在此函数中被转换为整型,小数点后面被删除.
2.理解下面的程序并运行,然后回答问题.
int*p1=newint;
-----------------------------------------------------①
int*p2=newint<
0>
-----------------------------------------------------②
char*p3=newchar[10];
-----------------------------------------------------③
①、②、③处动态申请内存分别代表什么意思?
①new动态分配存放一个整数的内存空间,并将其首地址赋给指针变量p1;
②new动态分配存放一个整数的内存空间,并对其初始化赋值为0,并将其首地址赋给指针变量p2;
③new动态分配存放10个字符型数组元素的内存空间,并将其首地址赋给指针变量p3.
该程序存在什么不合理的地方?
.
程序结束时没有将分配的空间释放,应该使用delete函数释放内存.
3.理解下面的程序并运行,然后回答问题.
voidswap<
inta,intb>
inttemp=a;
a=b;
b=temp;
int*a,int*b>
inttemp=*a;
*a=*b;
*b=temp;
inti=5;
intj=10;
Beforeswap:
i="
i<
j="
j<
swap<
i,j>
Afterthefirstswap:
&
i,&
j>
Afterthesecondswap:
输出结果是什么?
①处函数调用不能实现两个数的交换,而②可以,原因是什么?
①处调用的函数只是交换了局部变量a和b,并没有改变i和j的值;
②处调用的函数使用了引用形参,i和j的值随着此处调用的函数中a和b的对换而对换.
②处调用的是哪个函数?
1.2.2程序设计
1.定义两个重名函数,分别求出两点间平面距离和空间距离.
#include<
iostream>
cmath>
usingnamespacestd;
intdistance<
intx1,inty1,intx2,inty2>
doubledis;
dis=sqrt<
x1-x2>
*<
+<
y1-y2>
dis<
returndis;
intx1,inty1,intx2,inty2,intz1,intz2>
z1-z2>
voidmain<
inta;
inti,j,k,l,q,w,e,r,t,y;
请输入平面两点坐标:
cin>
i>
k>
l;
a=distance<
i,j,k,l>
请输入空间两点坐标"
q>
w>
e>
r>
t>
y;
q,w,e,r,t,y>
2.设计一个函数:
exch<
当调用exch<
a,b,c>
时,将a赋值给b,b赋值给c,c赋值给a,要求采用引用的方式来实现.
voidexch<
int&
m,int&
n,int&
p>
inttemp=p;
p=n;
n=m;
m=temp;
inta=1,b=2,c=3;
a="
a<
b="
b<
c="
c<
return0;
1.3思考题
1.自己设计一个程序,测试指向常量的指针,常指针,指向常量的常指针之间的区别.
inta=10;
intconst*p=&
a;
*p<
intb=20;
我们可以改变指针变量p所指向的内容,而不能改变p的地址空间,如添加上p=&
b;
我们就会发现编译错误!
指向常量的指针const——int*p,特点是指针所保存的地址可以改变,然而指针所指向的值却不可以改变.同理,当添加*p=b时,会发生编译错误!
指向常量的常指针
constintconst*p特点是指针所保存的地址不可变,指针所指向的数值也不可变.
2.编写一个函数,实现两个字符串变量的交换.
voidExchg2<
char*m,char*n>
{
chartmp=*m;
*m=*n;
*n=tmp;
}
voidmain<
chara='
q'
charb='
p'
b="
Exchg2<
a,&
b>
cout<
实验三类和对象—构造函数与析构函数
3.1实验目的
1.理解this指针的作用和用法;
2.掌握构造函数的定义和作用;
3.掌握构造函数的使用;
4.掌握拷贝构造函数的定义和使用;
5.掌握构造函数的重载;
6.掌握析构函数的定义和使用.
3.2实验内容
3.2.1程序阅读
1.理解下面的程序并运行,然后回答后面的问题.
classCPoint
public:
voidSet<
intx,inty>
voidPrint<
private:
intx;
inty;
};
voidCPoint:
:
Set<
x=x;
y=y;
Print<
x="
x<
y="
y<
CPointpt;
pt.Set<
10,20>
pt.Print<
以上程序编译能通过吗?
如果不能,原因是什么?
能通过编译.
以上程序的运行结构是否正确,如果不正确,分析为什么,如何改正?
结果不正确,因为Set函数中的形参与类中的相同产生错误,改为voidCPoint:
:
intm,intn>
2.理解下面的程序并运行,然后回答后面的问题.
classCPerson
CPerson<
intage;
char*name;
CPerson:
voidCPerson:
name="
name<
age="
age<
CPersonps<
23,"
X三"
ps.Print<
以上程序存在三个错误,在不改变主函数内容的前提下,试改正该程序.
string>
intm,stringn>
age=m;
name=n;
stringname;
3.2.2程序设计
1.设计实现一个CPoint类,满足以下要求:
a.该类包含两个整型成员变量x〔横坐标〕和y〔纵坐标〕,以与一个输出函数Print<
用来输出横坐标和纵坐标,要求不可以在类的外部直接访问成员变量;
b.可以采用没有参数的构造函数初始化对象,此时的成员变量采用默认值0;
c.可以采用直接输入参数的方式来初始化该类的成员变量;
ioamanip>
classCPoint{
voidprint<
CPoint<
{x=0;
y=0;
point<
intx1,inty1>
intGetX<
{returnx;
intGetY<
{returny;
print<
setw<
6>
CPoint:
x=x1;
y=y1;
{CPointp;
p.print<
p.point<
1,2>
p.print<
p.GetX<
3.3思考题
1.设计一个CStudent〔学生〕类,并使CStudent类具有以下特点:
a.有学生##、学号、程序设计、信号处理、数据结构三门课程的成绩;
b.全部信息由键盘输入;
c.通过成员函数统计学生平均成绩,当课程数量增加时,成员函数无须修改仍可以求取平均成绩;
d.输出学生的基本信息、各科成绩与平均成绩;
e.学生对象用链表存储;
f.统计不与格学生人数.
iomanip.h>
string.h>
#defineN3
#defineM3
classCStudent
voidsetstudent<
char*name,char*sn,floatscore[N]>
voidshowstudent<
charSname[10];
charSno[8];
floatScore[3];
floatAvg;
floatSum;
intcount;
voidCStudent:
setstudent<
inti;
floatSum=0.0;
intcount=0;
strcpy<
Sname,name>
Sno,sn>
for<
i=0;
N;
i++>
Score[i]=score[i];
count++;
3;
Sum=Sum+Score[i];
Avg=Sum/count;
showstudent<
Sname<
16>
Sno<
10>
Score[i]<
12>
Avg<
{
inti,j,k=0;
charname[10],no[8];
floatscore[N];
j=1;
=M;
j++>
pleaseinputstudent["
]name"
name;
]no"
no;
]score"
score[i];
CStudentS1;
student["
]name"
no"
15>
程序设计"
信号处理"
数据结构"
avg"
S1.setstudent<
name,no,score>
S1.showstudent<
if<
score[i]<
60>
k++;
不与格人数:
k<
实验五派生与继承—单基派生
5.1实验目的
1.理解继承的概念;
2.理解公有派生、私有派生和保护派生;
3.理解单基派生类中构造函数和析构函数的执行顺序.
5.2实验内容
5.2.1程序阅读
#include"
iostream.h"
classCBase
CBase<
inta>
a>
protected:
classCDerive:
publicCBase
CBase:
intb;
CDerived;
d.print<
CBaseb;
b.print<
以上程序有两个错误,试指出来,并改正之.
派生类CDerive中没有定义CDerive〔〕,主函数中没有给d,b对象赋值.
CDerive<
inta,intc>
b=c;
CDerived<
1,3>
CBaseb<
2>
basestructure"
~CBase<
basedestructure"
inta,intb,intc>
b<
c<
c>
derivestructure"
~CDerive<
derivedestructure"
b.a="
b.a<
intc;
1,2,3>
以上程序的输出结果是什么,为什么?
程序错误,不能输出结果."
〞这个语句中调用了基类中的保护参数a.
①处语句执行完后,d.b.a的值为多少?
b.a=2.
实验七多态性—函数与运算符重载
7.1实验目的
1.理解静态联编和动态联编的概念;
2.掌握成员函数方式运算符重载;
3.掌握友元函数方式运算符重载;
4.掌握++、--、=运算符的重载.
7.2实验内容
7.2.1程序阅读
classCComplex
CComplex<
real=0;
imag=0;
real=x;
imag=y;
intreal;
intimag;
CComplexoperator+<
CComplexobj1>
-----------------------------------------------①
CComplexobj2<
real+obj1.real,imag+obj1.imag>
returnobj2;
CComplexobj1<
100,30>
20,30>
CComplexobj;
obj=obj1+obj2;
------------------------------------------------------------------②
cout<
obj.real<
obj.imag<
endl;
①处的运算符重载,为什么该函数的返回值要设计成CComplex类型?
运算符重载函数的返回值与其操作类的类型相同.
②处的运算符重载函数调用就相当于"
obj=operator+<
obj1,obj2>
〞,请问CComplex类中的运算符重载函数为什么只有一个参数?
因为另一个参数是隐含调用,是CComplex类的当前对象.它通过this指针隐含地进行传递.
real=0.0;
imag=0.0;
floatx,floaty>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 实验