面向对象程序设计实验.docx

上传人:b****6 文档编号:3038801 上传时间:2022-11-17 格式:DOCX 页数:28 大小:44.91KB
下载 相关 举报
面向对象程序设计实验.docx_第1页
第1页 / 共28页
面向对象程序设计实验.docx_第2页
第2页 / 共28页
面向对象程序设计实验.docx_第3页
第3页 / 共28页
面向对象程序设计实验.docx_第4页
第4页 / 共28页
面向对象程序设计实验.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

面向对象程序设计实验.docx

《面向对象程序设计实验.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验.docx(28页珍藏版)》请在冰豆网上搜索。

面向对象程序设计实验.docx

面向对象程序设计实验

实验一C++基础

1.1实验目的

1.了解并熟悉开发环境,学会调试程序;

2.熟悉C++中简单的标准输入输出函数的使用方法;

3.理解const修饰符的作用并学会应用;

4.理解内联函数的优缺点并学会其使用场合;

5.理解并学会函数重载;

6.理解并熟练掌握使用new和delete来分配内存;

7.理解并熟练掌握引用的使用方法。

1.2实验内容

1.2.1程序阅读

1.理解下面的程序并运行,然后回答问题。

#include

intmax_def(intx,inty)

{

return(x>y?

x:

y);

}

intmax_def(intx,inty,intz)

{

inttemp=0;

return(temp=(x>y?

x:

y))>z?

temp:

z;

}

doublemax_def(doublex,doubley)

{

return(x>y?

x:

y);

}

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="<

cout<<"x2="<

cout<<"d1="<

cout<<"d2="<

return1;

}

问题一:

上述程序的输出结果是什么?

问题二:

用的是哪个函数?

答:

调用的函数是

intmax_def(intx,inty,intz)

{

inttemp=0;

return(temp=(x>y?

x:

y))>z?

temp:

z;

}

问题三:

②处的输出结果为什么是d2=12,而不是d2=12.3?

答:

因为①处调用的是整型函数,d2在此函数中被转换为整型,小数点后面被删除。

2.理解下面的程序并运行,然后回答问题。

#include

intmain()

{

int*p1=newint;-----------------------------------------------------①

int*p2=newint(0);-----------------------------------------------------②

char*p3=newchar[10];-----------------------------------------------------③

return1;

}

问题一:

①、②、③处动态申请内存分别代表什么意思?

答:

①new动态分配存放一个整数的内存空间,并将其首地址赋给指针变量p1;②new动态分配存放一个整数的内存空间,并对其初始化赋值为0,并将其首地址赋给指针变量p2;③new动态分配存放10个字符型数组元素的内存空间,并将其首地址赋给指针变量p3。

问题二:

该程序存在什么不合理的地方?

答:

程序结束时没有将分配的空间释放,应该使用delete函数释放内存。

3.理解下面的程序并运行,然后回答问题。

#include

voidswap(inta,intb)

{

inttemp=a;

a=b;

b=temp;

}

voidswap(int*a,int*b)

{

inttemp=*a;

*a=*b;

*b=temp;

}

intmain()

{

inti=5;

intj=10;

cout<<"Beforeswap:

i="<

swap(i,j);-----------------------------------------------------①

cout<<"Afterthefirstswap:

i="<

swap(&i,&j);-----------------------------------------------------②

cout<<"Afterthesecondswap:

i="<

return1;

}

问题一:

输出结果是什么?

问题二:

①处函数调用不能实现两个数的交换,而②可以,原因是什么?

答:

①处调用的函数只是交换了局部变量a和b,并没有改变i和j的值;②处调用的函数使用了引用形参,i和j的值随着此处调用的函数中a和b的对换而对换。

问题三:

②处调用的是哪个函数?

答:

调用的函数是

voidswap(inta,intb)

{

inttemp=a;

a=b;

b=temp;

}

1.2.2程序设计

1.定义两个重名函数,分别求出两点间平面距离和空间距离。

#include

#include

usingnamespacestd;

intdistance(intx1,inty1,intx2,inty2)

{

doubledis;

dis=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

cout<

returndis;

}

intdistance(intx1,inty1,intx2,inty2,intz1,intz2)

{

doubledis;

dis=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));

cout<

returndis;

}

voidmain()

{

inta;

inti,j,k,l,q,w,e,r,t,y;

cout<<"请输入平面两点坐标:

"<

cin>>i>>j>>k>>l;

a=distance(i,j,k,l);

cout<<"请输入空间两点坐标"<

cin>>q>>w>>e>>r>>t>>y;

a=distance(q,w,e,r,t,y);

}

2.设计一个函数:

exch(),当调用exch(a,b,c)时,将a赋值给b,b赋值给c,c赋值给a,要求采用引用的方式来实现。

#include

#include

usingnamespacestd;

voidexch(int&m,int&n,int&p)

{

inttemp=p;

p=n;

n=m;

m=temp;

}

intmain()

{

inta=1,b=2,c=3;

cout<<"a="<

exch(a,b,c);

cout<<"a="<

return0;

}

1.3思考题

1.自己设计一个程序,测试指向常量的指针,常指针,指向常量的常指针之间的区别。

#include

usingnamespacestd;

voidmain()

{

inta=10;

intconst*p=&a;

cout<

cout<<*p<

intb=20;

}

我们可以改变指针变量p所指向的内容,而不能改变p的地址空间,如 添加上p=&b;我们就会发现编译错误!

指向常量的指针const——int*p,特点是指针所保存的地址可以改变,然而指针所指向的值却不可以改变。

同理,当添加*p=b时,会发生编译错误!

指向常量的常指针

constintconst*p特点是指针所保存的地址不可变,指针所指向的数值也不可变。

2.编写一个函数,实现两个字符串变量的交换。

#include

usingnamespacestd;

voidExchg2(char*m,char*n)

{

chartmp=*m;

*m=*n;

*n=tmp;

}

voidmain()

{

chara='q';

charb='p';

cout<<"a="<

Exchg2(&a,&b);

cout<<"a="<

}

实验三类和对象—构造函数与析构函数

3.1实验目的

1.理解this指针的作用和用法;

2.掌握构造函数的定义和作用;

3.掌握构造函数的使用;

4.掌握拷贝构造函数的定义和使用;

5.掌握构造函数的重载;

6.掌握析构函数的定义和使用。

3.2实验内容

3.2.1程序阅读

1.理解下面的程序并运行,然后回答后面的问题。

#include

classCPoint

{

public:

voidSet(intx,inty);

voidPrint();

private:

intx;

inty;

};

voidCPoint:

:

Set(intx,inty)

{

x=x;

y=y;

}

voidCPoint:

:

Print()

{

cout<<"x="<

}

voidmain()

{

CPointpt;

pt.Set(10,20);

pt.Print();

}

问题一:

以上程序编译能通过吗?

如果不能,原因是什么?

能通过编译。

问题二:

以上程序的运行结构是否正确,如果不正确,分析为什么,如何改正?

结果不正确,因为Set函数中的形参与类中的相同产生错误,改为voidCPoint:

Set(intm,intn)。

2.理解下面的程序并运行,然后回答后面的问题。

#include

classCPerson

{

public:

voidPrint();

private:

CPerson();

private:

intage;

char*name;

};

CPerson:

:

CPerson()

{

}

voidCPerson:

:

Print()

{

cout<<"name="<

}

voidmain()

{

CPersonps(23,"张三");

ps.Print();

}

问题一:

以上程序存在三个错误,在不改变主函数内容的前提下,试改正该程序。

#include

#include

usingnamespacestd;

class

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

当前位置:首页 > 法律文书 > 调解书

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

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