面向对象程序设计C++实验报告Word文档下载推荐.docx
- 文档编号:5027847
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:45
- 大小:61.36KB
面向对象程序设计C++实验报告Word文档下载推荐.docx
《面向对象程序设计C++实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计C++实验报告Word文档下载推荐.docx(45页珍藏版)》请在冰点文库上搜索。
五种形体不用顶点坐标的表示形式,而只是简单地用它们的特征值表示。
例如:
矩形、平行四边形用长和高表示;
正方形用边长表示;
梯形用两条平行边长和高表示;
菱形用两条对象线长表示。
要求为这五种形体编写相应的类,每个类的设计要求如下:
(1)Quadrangle类必须成为抽象类,是其它形体类的祖先。
它拥有如下成员:
成员
类型
是否纯虚
name
数据
/
area
函数
是
draw
what
可选
(2)其它形体类之间的继承关系请自行拟定。
其中,Parallelogram类必须拥有如下虚成员:
●Width();
//返回宽
●Height();
//返回高
(3)每个形体类必须完成如下操作:
[1]设置标志名属性name。
五种形体的标志名必须是Parallelogram、Rectangle、Diamond、Trapezoid和Square之一(第一个字母大写,其余小写);
[2]重载area()成员;
[3]重载draw()成员;
[4]重载Width()成员以返回宽;
[5]重载Height()成员以返回高;
[6]提供Width2()成员以返回第二条平行边长(仅对梯形)
(4)List类必须拥有如下成员函数:
●size();
//返回列表中的节点数
●push_back();
//将数据添加到列表末尾
●operator[];
//返回指定下标的数据
●traverse();
//遍历,需要一个访问函数作为参数
●pop_back()//用来删除列表的最后一个节点,其原型为:
voidpop_back();
(5)重温过程实际上就是遍历List类对象的过程。
2)选作内容
List类实际上是一种称为“容器”的类。
除了容纳形体指针,其实它还可以容纳任何类型的对象。
在本选作内容中,
(1)请将List类改为模板类,使其能容纳任何类型的对象;
(2)请为List类编写迭代器。
要求如下:
●该迭代器的类名为Iterator;
●该迭代器必须重载如下运算符:
●++:
迭代器后移
●!
=:
两个迭代器比较
●*:
返回迭代器指向节点的数据域中的值,即quad指针。
●=:
两个迭代器的复制
●+。
该运算符函数的原型为:
Iteratoroperator+(inti);
其功能为:
假设当前迭代器(的内部指针)指向了第k个节点(从0开始计数),那么+运算符返回一个迭代器,该迭代器是在当前迭代器的基础上向后移动i个位置得到的,即该迭代器指向了第k+i个节点。
Iteratoritr=list.begin()+5;
那么迭代器itr就指向了从列表的头节点往后数第5个结点。
为Iterator类编写begin()和end()成员。
七、实验器材(设备、元器件):
PC计算机、Windows系列操作系统、VisualStudio2013软件
八、实验步骤:
1)完成类的设计;
2)根据设计结果编写各种形体类的代码;
完成学习模式的编程与测试
3)完成List类的编码与测试;
4)完善程序流程,实现复习模式;
5)对前面完成的所有文件进行整合,生成一个解决方案,并进行调试;
6)程序优化。
九、实验程序及结果分析:
Canvas.h:
#pragmaonce
#include"
quad.h"
classQuadrangle;
//Canvas视图
classCanvas:
publicCScrollView
{
DECLARE_DYNCREATE(Canvas)
//protected:
public:
Canvas();
//动态创建所使用的受保护的构造函数
virtual~Canvas();
#ifdef_DEBUG
virtualvoidAssertValid()const;
#ifndef_WIN32_WCE
virtualvoidDump(CDumpContext&
dc)const;
#endif
protected:
virtualvoidOnDraw(CDC*pDC);
//重写以绘制该视图
virtualvoidOnInitialUpdate();
//构造后的第一次
DECLARE_MESSAGE_MAP()
staticCanvas*pCanvas;
staticvoiddrawQuad(constQuadrangle*quad);
staticboolisLearning;
booltoggleMode(void);
doublearea;
private:
enum_QUAD_{para=0,rect,sqr,diam,trap};
typedefpair<
string,_QUAD_>
KV;
map<
quadMap;
};
Diam:
#include<
string>
iostream>
Canvas.h"
#include"
para.h"
usingnamespacestd;
classDiamond:
publicPara
Diamond(intd1=4,intd2=8,stringnm="
Diamond"
):
Para(d1,d2,nm){};
~Diamond(){};
voiddraw()const{Para:
:
draw();
};
doublearea()const{return(double)width*height/2;
stringwhat()const{returnname;
int&
Width1(){returnd1;
Width2(){returnd2;
friendostream&
operator<
<
(ostream&
os,constDiamond&
c2);
Diamond&
operator=(constDiamond&
di)
{
name=di.name;
d1=di.d2;
d2=di.d2;
return*this;
}
intd1,d2;
Experiment:
//experiment.h:
PROJECT_NAME应用程序的主头文件
//
#ifndef__AFXWIN_H__
#error"
在包含此文件之前包含“stdafx.h”以生成PCH文件"
resource.h"
//主符号
//CexperimentApp:
//有关此类的实现,请参阅experiment.cpp
classCexperimentApp:
publicCWinApp
CexperimentApp();
//重写
virtualBOOLInitInstance();
//实现
externCexperimentApptheApp;
Experimentdlg.h:
//experimentDlg.h:
头文件
canvas.h"
//CexperimentDlg对话框
classCexperimentDlg:
publicCDialogEx
//构造
CexperimentDlg(CWnd*pParent=NULL);
//标准构造函数
//对话框数据
enum{IDD=IDD_EXPERIMENT_DIALOG};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDV支持
HICONm_hIcon;
//生成的消息映射函数
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
Canvas*pCanvas;
afx_msgvoidOnBnClickedOk();
doubleanswer;
CStringresult;
afx_msgvoidOnClickedButtonNext();
afx_msgvoidOnClickedButtonStop();
afx_msgvoidOnClickedButtonSubmit();
QUADPTRcreateAquad(void);
boollastDone;
virtualBOOLOnCommand(WPARAMwParam,LPARAMlParam);
List.h:
//typedefvoid(*ACCESSFUN)(QUADPTR);
//定义遍历时节点处理函数类型
classList
structNode
QUADPTRdata;
Node*next;
Node(QUADPTRd):
data(d){}
}*head,*tail;
//链表的头尾指针
//typedefNode*_range;
size_tlen;
//链表中节点的数目,即链表的长度
List():
head(NULL),tail(NULL){len=0;
}//平凡构造函数
List(Listconst&
l)
head=tail=NULL;
Node*p=l.head;
while(p!
=NULL)
{
this->
push_back(p->
data);
p=p->
next;
}
len=0;
}//复制构造函数
~List()
Node*p=head,*q;
q=p;
deleteq;
Node*Tail(){returntail;
//size_tsize(){returnlen;
//获取链表的长度
size_tList:
size()
Node*p=head;
size_ti=0;
++i;
returni;
voidpush_back(constQUADPTRquad)//尾部添加
Node*p=newNode(quad);
p->
next=NULL;
if(tail==NULL)head=tail=p;
else{tail->
next=p;
tail=p;
len++;
intpop_back()
if(len==0)
returnlen;
Node*c=head;
if(c==tail){deletec;
else{
while(c->
next!
=tail)c++;
deletetail;
tail=c;
tail->
len--;
returnlen;
voidtraverse(void(*f)(constQUADPTR&
))
inti=1;
cout<
"
第"
<
i++<
个"
endl;
f(p->
//请自行添加指针移动部分
}//遍历
List&
operator=(constList&
{
{
}
operator+=(constQUADPTR&
data)
Node*p=newNode(data);
if(tail==NULL)
head=tail=p;
tail->
tail=p;
QUADPTR&
operator[](size_tn)
for(size_ti=1;
i<
=n;
i++){
returnp->
data;
Para.h:
classPara:
publicQuadrangle
Para(intw=5,inth=7,stringnm="
Parallelogram"
width(w),height(h),Quadrangle(nm){};
~Para(){};
voiddraw()const{Canvas:
drawQuad(this);
doublearea()const{returnwidth*height;
stringwhat()const{returnQuadrangle:
what();
Width(){returnwidth;
//获取矩形的宽。
如果是梯形,还需要一个成员int&
Width2()来获取另一条平行边的长度
Height(){returnheight;
//获取矩形的高
os,constPara&
c3);
Para&
operator=(constPara&
pa)
name=pa.name;
width=pa.width;
height=pa.height;
intwidth;
intheight;
Quad.h:
classQuadrangle
stringname;
//形体的标识
Quadrangle(stringnm="
Quadrangle"
):
name(nm){}
virtualdoublearea()const=0;
virtualvoiddraw()const=0;
typedefQuadrangle*QUADPTR;
Rect.h:
classRect:
Rect(intw=4,inth=8,stringnm="
Rectangle"
Para(w,h,nm){};
~Rect(){};
stringwhat()const{returnPara:
doublearea()const{returnPara:
area();
voiddraw()const{Canvas:
intWidth()const{returnwidth;
intHeight()const{returnheight;
os,constRect&
c1);
Rect&
operator=(constRect&
re)
name=re.name;
width=re.width;
height=re.height;
Resource.h:
//{{NO_DEPENDENCIES}}
//MicrosoftVisualC++generatedincludefile.
//Usedbyexperiment.rc
#defineIDM_ABOUTBOX0x0010
#defineIDD_ABOUTBOX100
#defineIDS_ABOUTBOX101
#defineIDD_EXPERIMENT_DIALOG102
#defineIDR_MAINFRAME128
#defineIDC_EDIT_ANSWER1000
#defineIDC_BUTTON_SUBMIT1001
#defineIDC_BUTTON_NEXT1002
#defineIDC_BUTTON_STOP1003
#defineIDC_EDIT_RESULT1004
#defineIDC_STATIC_GROUP1005
//Nextdefaultvaluesfornewobjects
//
#ifdefAPSTUDIO_INVOKED
#ifndefAPSTUDIO_READONLY_SYMBOLS
#define_APS_NEXT_RESOURCE_VALUE129
#define_APS_NEXT_COMMAND_VALUE32771
#define_APS_NEXT_CONTROL_VALUE1006
#define_APS_NEXT_SYMED_VALUE101
Squa.h:
rect.h"
classSquare:
publicRect
Square(intw=6,stringnm="
Square"
Rect(w,w,nm){};
~Square(){};
voiddraw()const{Rect:
doublearea()const{returnwidth*width;
stringwhat()const{returnRect:
operator
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 C+ 实验 报告