《VC++程序设计》实验指导书_第1页
《VC++程序设计》实验指导书_第2页
《VC++程序设计》实验指导书_第3页
《VC++程序设计》实验指导书_第4页
《VC++程序设计》实验指导书_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一 熟悉VC+的集成环境一、实验目的1、熟悉VC+6.0集成开发环境,理解项目的概念。2、熟练掌握VC+6.0项目工作区、各种编辑器、菜单栏和工具栏的使用。3、掌握用MFC AppWizard向导创建MFC应用程序框架。二、实验要求1、使用VisualC+6.0对一个C+程序进行编辑、编译、连接和运行。编辑、编译、连接和运行一个程序输出”Hello,C+!”按下面的步骤进行实验:(1)单击任务栏中的“开始”按钮,在弹出菜单中选择“程序”菜单项,单击“Microsoft Visual Studio 6.0”,再单击“Microsoft Visual C+ 6.0”,启动Visual C+ 6

2、.0的IDE环境主窗口;(2)观察菜单栏上的各个菜单标题;(3)输入下列源程序;源程序1:/*EX1-1.cpp*/# includevoid main() cout” Hello,C+!”endl;2、使用AppWizard建立一个单文档应用程序。按下面的步骤进行实验:(1)执行File|New菜单命令,出现New对话框。在Project页面窗口中选择MFC AppWizardexe选项,在Project Name编辑框中输入项目名称Mysdi,在location编辑框中输入保存项目的路径。(2)在MFC AppWizard-Step1对话框中设置应用程序的类型,本例创建一个单文档程序,选择

3、Single document项,单击Finish按钮,出现New Project Information对话框,单击OK按钮,将生成应用程序框架文件,并在项目工作区窗口打开生成的应用程序的项目。3、有一函数写一程序,输入x,输出相应的y值。源程序如下:/*EX1-2.cpp*/# includevoid main()int x, y;coutx;if(x1)y=x;cout“x=”x “,” “y=x=”yendl;else if(x10)y=2*x-1;cout“x=”x “,” “y=2*x-1=”yendl;elsey=3*x-11;cout“x=”x “,” “y=3*x-11=”y

4、endl;4、分析得出下列程序运行结果:#include int f(int); void main() int i; for(i=0;i5;i+) coutf(i)0;i-) k+ = i; return k; 程序输出结果:实验二 类和对象的概念及构造函数和析构函数一、实验目的1、掌握类的定义,包括:构造函数、析构函数、成员函数和数据成员。2、了解并掌握对象成员的访问机制、理解this指针的含义和用途。3、掌握在VC开发环境中的程序的编译,执行。二、实验要求1、#include class Testprivate: int x;public: Test() cout构造函数被执行endl;

5、x=0; Test()cout析构函数被执行endl; void print() coutx=xendl;void main() Test obj1,obj2; obj1.print(); obj2.print();运行结果为:构造函数被执行构造函数被执行x=0x=0析构函数被执行析构函数被执行说明:在调用print()函数输出对象obj1、obj2的数据成员之后,在释放对象obj1、obj2之前,系统自动调用类的析构函数Test()来释放对象obj1、obj2的内存空间。2、编辑、运行测试下列程序,分析其结果#include class Aint a;public :A(int aa=0)

6、a=aa; A() coutDestructor A! aendl;class B: public Aint b;public:B(int aa=0, int bb=0) : A(aa) b=bb;B() coutDestructor B! bendl; ;void main()B x(7),y(8,9);运行结果为:Destructor B! 9Destructor A! 8Destructor B! 0Destructor A! 7说明:先构造x,y2个对象,执行构造函数,由于B是从A派生出来的,所以构造y时要先调用基类A的构造函数,然后才调用派生类B自己的构造函数,析构时刚好相反,先构造

7、的后析构,对于派生类对象y同样也是,先调用派生类的析构函数,再调用基类的析构函数.3、建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员变量:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个主函数,声明一个学生对象,然后调用成员函数在屏幕输出学生信息。程序如下:#include #include class Studentprivate: char name12; long id; char sex; int age; public: Student(char *p, long id, char se

8、x, int age) void print (); ;Student :Student(char *p, long id, char sex, int age) strcpy(name,p); this-id=id; this-sex=sex; this-age=age; void Student: print () cout姓名=namet; cout学号=idt; if(sex=f|sex=F) cout性别=女t; else cout性别男t; cout年龄=ageendl; void main() Student Stu(Wang,F,21); Stu.print(); 实验三 虚函

9、数一、实验目的1、了解虚函数的定义和作用。2、理解C+通过虚函数机制实现多态性的方法。3、了解虚函数的实现机制。二、实验要求1、阅读下面程序,写出执行结果class Apublic: int x; A(int ax)x=ax; virtual void show() coutx=xendl;class B:public Aprotected: int y;public: B(int x1, int y1=120):A(x1) y=y1; virtual void show()couty=yendl;class C: public Bpublic: C(int x2,int y2):B(x2,y

10、2) x=1000;y=2000; virtual void show()coutx yshow(); main()A a(100);B *pb=new B(0,300);B b(200);C *pc=new C(400,500);print(&a);print(pb);print(&b);print(pc);运行结果为:2、#include class Apublic:virtual void f()coutlendl;class B:public Apublic:B()cout2endl;class C:public Bpublic:virtual void f()B:f(); coutf

11、();运行结果为: 2213实验四 操作符重载、模板一、实验目的1、理解C+操作符重载的原理及实现机制。2、掌握操作符重载的两种方法。3、掌握模板的定义和使用。二、实验要求1、 阅读下面程序,写出运算结果 在point类中定义一个运算符函数,用于两个对象a和b相加,其结果为一个point类对象c,c中的x和y分别为对象a和b的x和y的和。(操作符作为成员函数重载)程序如下/*Ex4-1.cpp*/ #include iostream.h class point int x,y; public: point(int x1=0,int y1=0) x=x1;y=y1; point operator

12、 +(point p1); point operator +() x+;y+; return *this; void print() cout x y endl; ; point point:operator+(point p1) point p; p.x=x+p1.x; p.y=y+p1.y; return p; void main() point p1(10,10),p2(20,20); p1=p1+p2; p1.print(); p1+; p1.print(); 运行结果为:2、设计一个函数模板,它返回两个值中的较大值,并用int、char、double型的值进行验证。程序如下/*Ex4

13、-2.cpp*/#include template T max(T num1,T num2)T a;if (num1num2)a=num2;elsea=num1;return a;void main()coutmax(16,28)=max(16,28)endl;coutmax(d,m)=max(d,m) LoadStandardCursor(IDC_CROSS);3利用ClassWizard类向导为视图类添加按下鼠标左键WM_LBUTTONDOWN的消息处理函数。void CMyDrawView:OnLButtonDown(UINT nFlags, CPoint point) / TODO:

14、Add your message . . . . . .SetCapture(); / 捕捉鼠标:SetCursor(m_hCross); / 设置十字光标m_ptOrigin=point;m_bDragging=TRUE; / 设置拖拽标记/ CView:OnLButtonDown(nFlags, point);利用ClassWizard类向导为视图类添加鼠标移动WM_MOUSEMOVE的消息处理函数。void CMyDrawView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message . . . . . . if(

15、m_bDragging)CClientDC dc(this);dc.MoveTo(m_ptOrigin); dc.LineTo(point); / 绘制线段m_ptOrigin=point; / 新的起始点/ CView:OnMouseMove(nFlags, point);利用ClassWizard类向导为视图类添加左键释放WM_LBUTTONUP的消息处理函数。void CMyDrawView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message . . . . . . if(m_bDragging) m_bDrag

16、ging=false; / 清拖拽标记 ReleaseCapture(); / 释放鼠标,还原鼠标形状/ CView:OnLButtonUp(nFlags, point); 利用ClassWizard类向导为视图类添加鼠标移动WM_MOUSEMOVE的消息处理函数。void CMyDrawView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message . . . . . . if(m_bDragging)CClientDC dc(this);dc.MoveTo(m_ptOrigin); dc.LineTo(point);

17、 / 绘制线段m_ptOrigin=point; / 新的起始点/ CView:OnMouseMove(nFlags, point);(2)完善程序:1为线段定义新类CLine。选择“Insert|New Class”菜单命令,弹出New Class对话框中,在Class type栏选择Generic Class,在类名Name栏输入CLine,在类名Base classes栏输入CObject,单击OK按钮,自动生成了类CLine的头文件Line.h和实现文件Line.cpp的框架。2为类CLine定义成员变量和成员函数。class Cline : CObjectprivate:/ 定义成员

18、变量,表示一条直线起点和终点的坐标CPoint m_pt1;CPoint m_pt2;public:CLine();virtual CLine();CLine(CPoint pt1, CPoint pt2); / 构造函数void DrawLine(CDC *pDC); / 绘制线段;在Line.cpp中编写成员函数的实现代码: CLine:CLine(CPoint pt1, CPoint pt2)m_pt1=pt1;m_pt2=pt2;void CLine:DrawLine(CDC* pDC)pDC-MoveTo(m_pt1);pDC-LineTo(m_pt2);3一般都使用数组来保存多条线

19、段的数据,而且MFC提供了实现动态数组的类模板。类CObArray支持CObject指针数组,用它定义的对象可以动态生成。这样,可将存放每条线段数据的变量的指针存到CObArray类的对象中。为此在文档类CMyDrawDoc中定义有关的成员变量和成员函数,需要包含CLine类定义的头文件。 4当鼠标移动时,除了绘制线段,还要保存当前线段的起点坐标和终点坐标。需要在视图类CMyDrawView的OnMouseMove()鼠标移动消息处理函数中添加有关代码。void CMyDrawView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add you

20、r message handler code here and/or call defaultif(m_bDragging)CMyDrawDoc *pDoc=GetDocument(); /获得文档对象指针ASSERT_VALID(pDoc); /测试文档对象是否运行有效pDoc-AddLine(m_ptOrigin, point); /加入线段到指针数组CClientDC dc(this);dc.MoveTo(m_ptOrigin); dc.LineTo(point); / 绘制线段m_ptOrigin=point; / 新的起始点/ CView:OnMouseMove(nFlags, po

21、int);5. 修改OnDraw()函数为了在改变程序窗口大小或最小化窗口后重新打开窗口时保留窗口中原有的图形,必须在OnDraw()函数中重新绘制前面利用鼠标所绘制的线段。这些线段的坐标作为类CLine对象的成员变量,所有CLine对象的指针已保存在动态数组m_LineArray中。 void CMyDrawView:OnDraw(CDC* pDC)CMyDrawDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereint nIndex=pDoc-GetNumLines()

22、; / 取得线段的数量/ 循环画出每一段线段while(nIndex-) / 数组下标从0到nIndex-1pDoc-GetLine(nIndex)-DrawLine(pDC); / 类CLine的成员函数把图形文件保存到磁盘上:1. 前面已定义了用来保存线段数据的CLine类,它已是CObject的派生类,现在添加函数Serialize()的声明和DECLARE_SERIAL宏。2. 在实现源文件Line.cpp中成员函数定义前添加IMPLEMENT_SERIAL宏: IMPLEMENT_SERIAL(CLine, CObject, 1) / 实现序列化类Cline3. 编写类CLine的序

23、列化函数Serialize()。 void CLine:Serialize(CArchive &ar) if(ar.IsStoring()arm_pt1m_pt1m_pt2; / 读出对象的数据4现在我们实现了CLine类的序列化,但只是一条线段的序列化。前面定义了CObArray类型的变量m_LineArray,由于CObArray类自身提供了序列化函数,所以作为CObArray类的对象m_LineArray可以直接序列化。变量m_LineArray中存放的是CLine类对象的指针,自然会调用类CLine的序列化函数,完成了多个CLine类对象的序列化。 void CMyDrawDoc:Se

24、rialize(CArchive& ar)if (ar.IsStoring()/ TODO: add storing code herem_LineArray.Serialize(ar); / 调用CObArray类的序列化函数else/ TODO: add loading code herem_LineArray.Serialize(ar);实验六 MFC Windows应用程序一、实验目的1、掌握MFC应用程序对象之间的关系,理解MFC应用程序的生与死缘由。2、掌握MFC消息映射和命令传递的内部机制,学会消息映射处理方法的使用。3、学会MFC应用程序菜单编程。4、掌握MFC应用程序框架中各

25、种文件的组成和功能用法。二、实验要求1、编写一个单文档应用程序,程序运行后,当用户选择“旋转”菜单命令时启动定时器以发送用户自定义消息,在自定义消息处理函数中旋转显示一行文本,文本的内容是“祝:盐城工学院毕业生早日找到理想工作!”;当用户选择“停止”命令时停止旋转显示文本。1首先利用MFC AppWizardexe向导创建一个名为Rotate的应用程序。利用ClassWizard类向导为CRotateView类生成 “旋转”菜单命令的消息处理函数,通过设置定时器在指定的时间间隔向窗口发送WM_TIMER消息。 SetTimer(1,200,NULL); / 启动定时器2在文件RotateVie

26、w.cpp开始位置定义一个用户自定义消息:#define WM_MYMESSAGE WM_USER+1 利用ClassWizard为CRotateView类生成消息WM_TIME的消息处理函数:SendMessage(WM_MYMESSAGE); 3在类CRotateView的定义中声明自定义消息处理函数:afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); 在文件RotateView.cpp消息映射BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加自定义消息映射宏: ON_MESSAGE(WM_MYMES

27、SAGE,OnMyMyessage) 4在类CRotateView的定义中声明一个private属性、int型的成员变量m_dEscapement,它表示文本显示角度,并在类CRotateView的构造函数中初始化:m_dEscapement=0; 5在文件RotateView.cpp中手工添加自定义消息处理函数实现代码,完成以动画形式旋转显示一行文本的功能。LRESULT CRotateView:OnMyMessage(WPARAM wParam,LPARAM lParam) CClientDC dc(this); m_dEscapement=(m_dEscapement+100)%3600

28、; CFont fontRotate;fontRotate.CreateFont(30,0,m_dEscapement,0,0,0,0,0,0,0,0,0,0,0);CFont *pOldFont=dc.SelectObject(&fontRotate);CRect rClient;GetClientRect(rClient);dc.FillSolidRect(&rClient,RGB(255,255,255);dc.TextOut(rClient.right/2,rClient.bottom/2, 祝:盐城工学院毕业生早日找到理想工作! );dc.SelectObject(pOldFont)

29、;return 0;6利用ClassWizard生成菜单项“停止”的消息处理函数,销毁已创建的定时器:KillTimer(1); 实验七 对话框和控件一、实验目的1、掌握标准控件的设计与应用。2、掌握公共控件的设计与应用。二、实验要求1、编写一个SDI应用程序Password_PropSt,要求实现如下功能:程序启动后首先弹出一个用户身份验证对话框,当用户键入正确的口令后才能进入应用程序的主界面;运行Password程序后,首先显示“用户身份确认”对话框,当选择“显示口令”项时,键入的口令将在下面的编辑框中显示出来,运行结果如下:2、执行“测试控件|属性对话框”菜单命令打开一个属性表对话框,对

30、话框有两个属性页,在每个页面分别显示教材例7-9中“组合框”和例7-10中“公共控件”对话框,并完成与这两个例题要求相同的程序功能。实验八 图形处理一、实验目的1、掌握VC+IDE绘制图形的方法。2、掌握如何使用画笔及光标设置。3、掌握图形处理的原理和绘制各种不同类型的图形。二、实验要求1、 编写一个SDI应用程序,绘制不同风格、宽度和颜色的直线。 在OnDraw()函数中添加如下所示的代码:CPen *pPenOld, PenNew;int nPenStyle= PS_SOLID, / 实线 PS_DOT, / 点线 PS_DASH, / 虚线 PS_DASHDOT, / 点划线 PS_DA

31、SHDOTDOT, / 双点划线 PS_NULL, / 空的边框 PS_INSIDEFRAME, / 边框实线;char*strStyle=Solid,Dot,Dash,DashDot, DashDotDot,Null,InsideFrame;pDC-TextOut(60,10,用不同样式的画笔绘图); for(int i=0; iSelectObject(&PenNew); / 选择画笔 pDC-TextOut(10,30+20*i,strStylei);pDC-MoveTo(100,40+20*i);pDC-LineTo(200,40+20*i);pDC-SelectObject(pPenOld); / 恢复原来的画笔PenNew.DeleteObject(); / 删除底层的GDI对象 else MessageBox(不能创建画笔!); char *strWidth=1,2,3,4,5,6,7;pDC-TextOut(260,10,用不同宽度的画笔绘图);for(i=0; iSelectObject(&PenNew); / 选择画笔pDC-TextOut(260,30+20*i,strWidthi);pDC-MoveTo(300,40+20*i);pDC-LineTo(400,40+20*i)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论