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

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

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

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

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

面向对象程序设计实验2

《实验07:

类与对象》实验报告

实验序号:

  07        实验项目名称:

类与对象

学  号

姓  名

专业、班

实验地点

指导教师

实验时间

一、实验目的及要求

类是C++扩展数据类型,可以封装不同类型的数据成员和函数成员,类是面向对象程序设计的基础。

本次实验内容包括面向对象的基本概念、构造函数与析构函数,从实际问题抽象出类等,通过实验要求:

1、掌握面向对象的基本概念,类的定义方法;

2、掌握类成员的访问权限及访问类成员的方法;

3、掌握内联函数;

4、掌握引用概念及应用,引用作为函数参数;

5、掌握构造函数与析构函数的意义及使用方法。

6、掌握友员函数、友员类的使用,以及运算符重载为成员函数和友元函数的方法。

二、实验设备(环境)及要求

微型计算机;windows操作系统;MicrosoftVisualStudio6.0集成开发环境;MicrosoftVisualStudio6.0集成开发环境的MSDN。

三、实验内容与步骤

1、【范例】设计一个程序,定义一个矩形类,包括数据成员和函数成员。

【提示】要求有构造函数、析构函数,完成赋值、修改、显示等功能的接口,并编写main函数测试,要求用一个对象初始化另一个对象。

【分析】要确定一个矩形(四边都是水平或垂直方向,不能倾斜),只要确定其左上角和右下角的x和y坐标即可,因此应包括四个数据成员,eft,right,top,bottom,即左右上下四个边界值。

由构造函数对数据成员赋值,赋值函数完成未初始化的矩形赋值,修改函数可以修改

各数据成员,显示函数则画出该矩形。

classRectangle{

intleft,top;

intright,bottom;

public:

Rectangle(intl=0,intt=0,intr=0,intb=0);

~Rectangle(){};//析构函数,在此函数体为空

voidAssign(intl,intt,intr,intb);

voidSetLeft(intt){left=t;}//以下四个函数皆为内联成员函数

voidSetRight(intt){right=t;}

voidSetTop(intt){top=t;}

voidSetBottom(intt){bottom=t;}

voidShow();

voidDraw(CDC*pDC);

};

//将上述内容保存为rect.h

#include

#include“rect.h”

//构造函数,带缺省参数,缺省值为全0,在声明中指定

Rectangle:

:

Rectangle(intl,intt,intr,intb){

left=l;top=t;

right=r;bottom=b;

}

voidRectangle:

:

Assign(intl,intt,intr,intb){

left=l;top=t;

right=r;bottom=b;

}

voidRectangle:

:

Show(){

cout<<”left-toppointis(”<

cout<<”right-bottompointis(”<

}

voidRectangle:

:

Draw(CDC*pDC){

pDC->Rectangle(left,top,right,bottom);

}

//将上述内容保存为rect.cpp

#include

#include“rect.h”

voidmain(){

Rectanglerect;

rect.Show();

rect.Assign(100,200,300,400);

rect.Show();

Rectanglerect1(0,0,200,200);

rect1.Show();

Rectanglerect2(rect1);

rect2.Show();

}

//将上述内容保存为Exp.cpp

【提示】Draw成员函数需要一个CDC指针参数,CDC是MFC中的设备上下文类,控制程序的图形输出,其成员函数Rectangle输出一个矩形,在这里不作要求。

运行程序是可以去掉这一函数。

【要求】

●创建工程,录入上述源程序,以多文件组织保存工程,建立可执行文件并执行,观察结果;哪些函数是内联的?

为什么?

其他函数怎样说明为内联的?

● 修改上述程序,以键盘输入的方式输入矩形的坐标值,修改后再执行。

 

2、构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,其中月请用枚举类型,并完成测试。

 

3、定义一个圆类(Circle),属性为半径(radius)和圆周长、面积,操作为输入半径并计算周长、面积,输出半径、周长和面积。

要求定义构造函数(以半径为参数,缺省值为0,周长和面积在构造函数中生成)和复制构造函数。

 

4、为复数类(Complex)增加重载的运算符-、-=、*=和/=。

设++为实部和虚部各自增一,亦请重载前置与后置++运算符。

分别使用成员函数和友元函数各做一遍。

并测试。

解:

注意后++,返回的是原值,但实部和虚部已各自增一,所以要先保留原值,再++。

这里是使用成员函数。

 

5、内置数据类型可以进行类型强制转换,类也可以进行同样的转换,这是通过定义类型转换函数实现的。

它只能是类的成员函数,不能是友元函数。

格式为:

类名:

:

operator转换后的数据类型(){…}

如:

operatorfloat()是转换为浮点数的成员函数。

使用时的格式为:

float(对象名);或(float)对象名;

定义人民币类,数据成员包括:

圆、角、分,均为整型。

类型转换函数将人民币类强制转换为浮点数,以圆为单位。

并编程进行检验。

 

 

四、实验结果与数据处理

 

2.

3.

4.

5.

五、分析与讨论

六、教师评语

签名:

日期:

成绩

附件:

源代码

2.

#include"stdafx.h"

#include

enummonth_std{JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEPT,OCT,NOV,DEC};

classtimedate

{

public:

voidsettime(intYear,enummonth_stdMonth,intDay,intHour,intMinute,intSecond);

voidshowtime()const;

private:

intyear,day,hour,minute,second;

enummonth_stdmonth;

};

voidtimedate:

:

settime(intYear,enummonth_stdMonth,intDay,intHour,intMinute,intSecond)

{year=Year;month=Month;day=Day;hour=Hour;minute=Minute;second=Second;}

voidtimedate:

:

showtime()const

{cout<<""<

"<

"<

intmain()

{

intuyear,umonth_1,uday,uhour,uminute,usecond;

enummonth_stdumonth;

timedatetime1;

cout<<"请输入时间(年月日时分秒,空格间距,月份输入数字)"<

cin>>uyear>>umonth_1>>uday>>uhour>>uminute>>usecond;

umonth=(enummonth_std)umonth_1;

time1.settime(uyear,umonth,uday,uhour,uminute,usecond);

time1.showtime();

cout<

return0;

}

3.

#include"stdafx.h"

#include

classCircle

{public:

Circle();

Circle(double);

Circle(constCircle&p);

voidshow()const;

private:

doubleradius,circumference,area;

};

Circle:

:

Circle()

{radius=0;circumference=0;area=0;}

Circle:

:

Circle(doubleradius_1)

{radius=radius_1;circumference=2*3.14*radius_1;area=3.14*radius_1*radius_1;}

Circle:

:

Circle(constCircle&p)

{radius=p.radius;circumference=p.circumference;area=p.area;}

voidCircle:

:

show()const

{cout<<"radiuis"<

intmain()

{doubler_input;

cout<<"Inputradiu:

\n";

cin>>r_input;

Circlecircle1(r_input);

Circlecircle2=circle1;

circle1.show();

circle2.show();

return0;

}

4.

#include"stdafx.h"

#include

classcomplex

{

private:

intx,y;//x+yi复数

public:

complex();

complex(int,int);

~complex(){}

voidpoint()const;

complexoperator+(complex&);

complexoperator-(complex&);

complexoperator*(complex&);

complexoperator/(complex&);

voidoperator+=(complex&);

voidoperator-=(complex&);

voidoperator*=(complex&);

voidoperator/=(complex&);

voidoperator+=(int);

voidoperator-=(int);

voidoperator*=(int);

voidoperator/=(int);

complexoperator++();

complexoperator++(int);

complexoperator--();

complexoperator--(int);

};

complex:

:

complex(){x=0;y=0;}

complex:

:

complex(inta,intb){x=a;y=b;}

voidcomplex:

:

point()const

{cout<

complexcomplex:

:

operator+(complex&p1)//+

{complexp2;p2.x=x+p1.x;p2.y=y+p1.y;returnp2;}

complexcomplex:

:

operator-(complex&p1)//-

{complexp2;p2.x=x-p1.x;p2.y=y-p1.y;returnp2;}

complexcomplex:

:

operator*(complex&p1)//*

{complexp2;p2.x=x*p1.x;p2.y=y*p1.y;returnp2;}

complexcomplex:

:

operator/(complex&p1)///

{complexp2;

p2.x=(x*p1.x+y*p1.y)/(p1.x*p1.x+p1.y*p1.y);

p2.y=(y*p1.x-x*p1.y)/(p1.x*p1.x+p1.y*p1.y);

returnp2;}

voidcomplex:

:

operator+=(complex&p1)//+=

{x=x+p1.x;y=y+p1.y;}

voidcomplex:

:

operator-=(complex&p1)//-=

{x=x-p1.x;y=y-p1.y;}

voidcomplex:

:

operator*=(complex&p1)//*=

{x=x*p1.x;y=y*p1.y;}

voidcomplex:

:

operator/=(complex&p1)///=

{

x=(x*p1.x+y*p1.y)/(p1.x*p1.x+p1.y*p1.y);

y=(y*p1.x-x*p1.y)/(p1.x*p1.x+p1.y*p1.y);

}

voidcomplex:

:

operator+=(intt)

{x=x+t;y=y+t;}

voidcomplex:

:

operator-=(intt)

{x=x-t;y=y-t;}

voidcomplex:

:

operator*=(intt)

{x=x*t;y=y*t;}

voidcomplex:

:

operator/=(intt)

{x=x/t;y=y/t;}

complexcomplex:

:

operator++()//++

{x++;y++;return*this;}

complexcomplex:

:

operator--()//--

{x--;y--;return*this;}

complexcomplex:

:

operator++(int)

{complextemp(*this);x++;y++;returntemp;}

complexcomplex:

:

operator--(int)

{complextemp(*this);x--;y--;returntemp;}

intmain()

{

complextext1(5,4);

complextext2(9,8);

complextext3,text4;

cout<<"复数1为";text1.point();cout<<"\n复数2为";text2.point();cout<<"\n复数3为";text3.point();cout<<"\n";

text3=text1+text2;cout<<"1+2=";text3.point();cout<

text3=text1-text2;cout<<"1-2=";text3.point();cout<

text3=text1*text2;cout<<"1*2=";text3.point();cout<

text3=text1/text2;cout<<"1/2=";text3.point();cout<

text2+=text1;cout<<"2+=1:

";text2.point();cout<

text2-=text1;cout<<"2-=1:

";text2.point();cout<

text2*=text1;cout<<"2*=1:

";text2.point();cout<

text2/=text1;cout<<"2/=1:

";text2.point();cout<

cout<<"1=";text1.point();cout<

text2=text1++;cout<<"1++:

";text2.point();cout<

++text1;cout<<"++1:

";text1.point();cout<

text2=text1--;cout<<"1--:

";text2.point();cout<

--text1;cout<<"--1:

";text1.point();cout<

return0;

}

5.

#include"stdafx.h"

#include

classRMB

{

public:

RMB(){yuan=0;jiao=0;fen=0;}

RMB(inta,intb,intc){yuan=a;jiao=b;fen=c;}

~RMB(){}

voidpoint()const

{cout<

voidzhengli()

{if(fen/10!

=0){jiao+=(fen/10);fen%=10;}

if(jiao/10!

=0){yuan+=(jiao/10);jiao%=10;}}

operatorfloat()

{floatjieguo;jieguo=float(yuan+0.1*jiao+0.01*fen);

returnjieguo;}

private:

intyuan,jiao,fen;

};

intmain()

{RMBtext1(35,15,87);

floattext2;

cout<<"text数据为:

";

text1.point();

cout<<"\n整理后的数据为:

";

text1.zhengli();

text1.point();

text2=float(text1);

cout<<"\n转换后的结果为:

"<

return0;

}

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

当前位置:首页 > 经管营销 > 金融投资

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

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