面向对象程序设计实验2.docx
- 文档编号:26551465
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:12
- 大小:34.70KB
面向对象程序设计实验2.docx
《面向对象程序设计实验2.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验2.docx(12页珍藏版)》请在冰豆网上搜索。
面向对象程序设计实验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; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 实验