《C面向对象程序设计》实验指导书(程细柱)_第1页
《C面向对象程序设计》实验指导书(程细柱)_第2页
《C面向对象程序设计》实验指导书(程细柱)_第3页
《C面向对象程序设计》实验指导书(程细柱)_第4页
《C面向对象程序设计》实验指导书(程细柱)_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、C+面向对象程序设计实验指导书主讲:程细柱韶关学院计算机科学技术学院2010-3-1目 录实验一 Visual C+开发环境及C+程序的上机过程3实验二 选择和循环结构程序设计8实验三 类的定义和使用11实验四 类的继承和派生14实验五 多态性程序设计15实验六 运算符重载和类模板17实验七 文件操作18实验八 利用AppWizard向导生成Windows应用程序20实验九 消息处理24实验十 文档/视图结构28实验十一 对话框设计30实验一 Visual C+开发环境及C+程序的上机过程一、实验目的1、 了解和使用VC集成开发环境;2、 熟悉VC环境的基本命令和功能键;3、 熟悉常用的功能菜

2、单命令 ;4、 学习使用VC+环境的帮助 ;5、 学习完整的C+程序开发过程 ;6、 理解简单的C+程序结构 二、实验内容 使用Visual C+ 6.0集成环境来编辑、编译并运行下面简单C+程序:1#include <iostream.h>void main()cout<<"This is a C+ program.n"2#include <iostream.h>int max(int,int); /声明自定义函数 void main() /主函数 int a,b,c;cout<<"input two number

3、:n"cin>>a>>b;c=max(a,b); /调用max函数,将得到的值赋给C cout<<"max="<<c<<endl;int max(int x,int y) /定义max函数,函数值为整型,形式参数x,y为整型 int z; /max函数中的声明部分,定义本函数中用到的变量z为整型 if(x>y) z=x;else z=y;return(z); /将z的值返回,通过max带回调用处 三、实验步骤Visual C+ 6.0启动后的用户界面 选择菜单“开始/程序/Microsoft Vis

4、ual Studio 6.0/Microsoft Visual C+ 6.0”,得到Visual C+ 6.0启动后的用户界面,如图1-1所示。图1-1 Visual C+ 6.0用户界面 1、创建新工程(1)单击菜单“文件/新建”,显示“新建”对话框,如图1-2所示。(2)在此对话框的列表栏中,选择“Win32 Console Application”(Win32控制台应用程序”)。在 “工程”栏中输入一个工程名,如“实验一”,在位置文本框中选择工程所在的路径,如图中所示H:C+实验实验一,单击“确定”按钮。图1-2 “新建”对话框(3)在“Win32 Consol Application-

5、Step 1 of 1” 对话框中选择An empty project单选项。然后单击“Finish”按钮,如图1-3所示。图1-3 “Win32 Consol Application-Step 1 of 1” 对话框(4)在“新建工程信息”对话框中单击“确认”按钮,完成工程创建过程。2、创建C+源程序文件(1)编辑C+源程序:编辑C+源程序时,选择“文件”菜单项,出现一个下拉式菜单,再选择该菜单中的“新建”选项(热键为Ctrl+N),打开“新建”窗口,如图1-4所示: 图1-4 “新建”窗口(2) 选择“文件”,在它的下拉列表框中选择“C+ Source File”,如图1-4所示,再按击“

6、确定”,出现编辑屏幕,如图1-5所示:图1-5 “C+”源程序编辑(3)在“C+源程序编辑”窗口下编辑C+源程序。在编辑窗口键入C+源程序。如图1-6所示,键入如下源程序:图1-6 编辑C+源程序3编译连接和运行源程序(1)选择菜单项“编译”,出现“编译”的下拉菜单,在该下拉式菜单中选择“编译 eg1-1.cpp”菜单项,这时系统开始对当前的源程序进行编译,在编译过程中,将所发现的错误显示在屏幕下方的“编译”窗口中。所显示的错误信息中指出该错误所在行号和该错误的性质。用户可根据这些错误信息进行修改。上述程序的“编译”窗口,如图1-7所示:图1-7 “编辑”窗口(2)编译无错误后,可进行连接生成

7、可执行文件(.exe),这时选择“编译”下拉菜单中的“构件 eg1-1.exe”选项。“编译”窗口出现如图1-8所示的信息说明编译连接成功,并生成以源文件名为名字的可执行文件(eg1-1.exe)。图1-8 编译连接信息(3)执行可执行文件的方法是选择“编译”菜单项中“执行 eg1-1.exe”选项。这时,运行该可执行文件,并将结果显示在另外一个显示执行文件输出结果的窗口中,如图1-9所示:图1-9 运行C+程序结果4关闭打开工作区、打开工作区单击菜单“文件/关闭工作区”,关闭工作区。单击菜单“文件/打开工作区”,在强出的对话框中选定“H:C+实验实验一实验一.dsw”,单击“打开”按钮,则可

8、打开工作区,对已建立的工程文件进行修改。5根据实验步骤14,建立、编译并运行实验程序2。四、实验要求1  复习教材有关内容。2  掌握C控制台程序的开发、调试步骤。3  完成实验报告。实验二 选择和循环结构程序设计一、实验目的1熟练if和switch选择结构、while 和for循环结构及实现循环的方法。2掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。二、知识要点C+语句可以分为以下5类:(1)表达式语句:由一个表达式构成一个语句,最典型的是,由赋值表达式构成一个赋值语句。例:a=5;(2)声明语句:一个名字在使用之前必须先声明,以便建立名字与

9、程序实体之间的映射关系。按声明的程序实体结构对象声明语句可以分为:声明变量;声明函数;声明对象。按产生不产生程序实体,声明语句可分为定义性与引用性两种。(3) 空语句:只有一个分号的语句称为空语句。主要用于语法上要求有一条语句但实际没有任何操作可执行的场合。(4)块语句:也称为复合语句或分程序,是括在一对花括号之间的语句序列。在语法上它相当于一条语句,只是在花括号外不再写分号。块语句主要在两种情形下使用:语法要求一条语句,但又难以只用一条简单语句表达的情形;形成局部化的封装体。(5)流程控制语句 条件语句:if () else 循环语句:for () 循环语句:while () 循环语句:do

10、 while () 结束本次循环语句:continue 终止执行switch或循环语句:break 多分支选择语句:switch()case1;case2 ;default; 从函数返回语句:return三、实验内容及步骤1 输入并运行下列程序并分析其功能。main() int t,a,b,c,d;cout<<“请输入四个数:”;cin>>a>>b>>c>>d;cout<<“n排序结果如下:”;if (a>b) t=a;a=b;b=t;if (a>c) t=a;a=c;c=t;if (a>d) t=a;a

11、=d;d=t;if (b>c) t=b;b=c;c=t;if (b>d) t=b;b=d;d=t;if (c>d) t=c;c=d;d=t;cout<<a<<b<<c<<d;2设计程序找出1100 间的质数,显示出来。用for 或while 或do-while循环语句实现。3下面程序统计字符数组c 中0、1、2及其他字符出现的次数,分别存放在变量i0、i1、i2中,统计结束后输出它们的值。要求:分析出现结果的原因,如何修改使结果正确。#include<stdio.h>#include<conio.h>vo

12、id main()char c=”0123456789001112222”int i0=0,i1=0,i2=0,i3=0;for (int i=0;i<19;i+)switch(ci) case0: i0+;case1: i1+;case2: i2+;default:i3+;cout<<”i0=”<<i0<<endl;cout<<”i1=”<<i1<<endl;cout<<”i2=”<<i2<<endl;cout<<”i3=”<<i3<<endl

13、;getch();实验三 类的定义和使用一、实验目的 1、 理解面向对象程序设计方法的基本原理及主要特点抽象、封装、继承和多态。 2、 理解类和对象的概念以及如何利用类来解决具体问题。 二、实验内容1、 掌握面向对象的程序设计思想 2、 掌握类的定义。 3、 掌握对象的声明和引用。 4、 掌握具有不同访问属性的成员的访问方式 5、 观察构造函数和析构函数的执行过程。三、实验步骤 构造函数和析构函数的执行 #include <iostream.h> class score public: score(int x,int y) sc1=x; sc2=y; cout<<&qu

14、ot;constructing score : "<<x<<" "<<y<<endl; score() cout<<"destructing score: "<<sc1<<" "<<sc2<<endl; protected: int sc1; int sc2; ; class student public: student(int id): score(88,99) noid=id; cout<<"

15、;constructing a student,id : "<<noid; student() cout<<"destructing a student: "<<noid<<endl; private: int noid; ; void main() student s1(333); cout<<"back in main"<<endl; 编译、连接并运行程序四、实验要求1、 写出程序,并调试程序,要给出测试数据和实验结果。2、 整理上机步骤,总结经验和体会。3、 完成实验

16、报告和上交程序。实验四 类的继承和派生一、实验目的 1、 理解继承的含义,掌握派生类的定义方法和实现;2、 理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员;3、 理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;4、 理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。 二、实验内容1. 掌握继承和派生的概念,派生类的定义方法。 2. 熟悉继承的不同方式对基类成员的访问控制 3. 掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺序

17、。 先执行所有基类的构造函数(顺序按照定义派生类时指定的各基关顺序) 再执行对象成员所在类的构造函数(顺序按照它们在类中的声明顺序) 最后执行派生类构造函数体中的内容。 三、实验步骤 1、派生类构造函数和析构函数的执行 class Person char m_strName10; int m_nAge; public: Person(char* name,int age) strcpy(m_strName, name); m_nAge = age; cout<<"constructor of person"<<m_strName<&l

18、t;endl; Person() cout<<"deconstrutor of person"<<m_strName<<endl; ; class Employee : public Person char m_strDept20; Person Wang; public: Employee(char *name, int age, char *dept, char *name1, int age1) : Person(name,age) , Wang(name1,age1) strcpy(m_strDept, dept); cout&l

19、t;<"constructor of Employee"<<endl; Employee() cout<<"deconstrucor of Employee"<<endl; 编译、连接并运行程序四、实验要求1. 写出程序,并调试程序,要给出测试数据和实验结果。2. 整理上机步骤,总结经验和体会。3. 完成实验报告和上交程序。实验五 多态性程序设计一实验目的 1、 理解多态性的基本概念;2、 掌握虚函数和纯虚函数的概念;3、 了解抽象类的概念。 二实验内容1、理解多态性的基本思想。2、学习使用虚函数实现动态多态性。

20、三、实验步骤 多态性编程实例 #include <iostream.h> class chuzhong public: chuzhong(double x,double y):x1(x),y1(y) virtual double sum() double score; score=x1+y1; return score; protected: double x1,y1; ; class gaozhong :public chuzhong public: gaozhong(double x,double y,double z):chuzhong(x,y),z1(z) virtual

21、double sum() double score; score=x1+y1+z1; return score; protected: double z1; ; void fn(chuzhong & chu) cout<<chu.sum()<<endl; void main() chuzhong cz(85.5,95.5); gaozhong gz(75.5,78.5,80.5); fn(cz); fn(gz); 编译、连接并运行程序四实验要求1. 写出程序,并调试程序,要给出测试数据和实验结果。2. 整理上机步骤,总结经验和体会。3. 完成实验报告和上交程序。

22、 实验六 运算符重载和类模板一、实验目的1掌握C+中运算符重载的机制和运算符重载的方式;2掌握类型转换的方式、内存的动态分配;3掌握类模板的定义,掌握类模板的实例化。二、知识要点1运算符重载成员函数方式: 单目(返回类型 类名 operator 单目运算符( ))双目(返回类型 类名operator 双目运算符(类名&引用 ))下标运算符重载:类型 类名operator (下标类型形参)函数体提取符重载:预定义插入符 ostream & ostreamoperator<<(type &obj);预定义提取符 istream & istreamoper

23、ator>>(type &obj);运算符重载规则:(1)不可以重载非C+的运算符;(2)运算符重载可以采用成员函数方式或友元方式;(3)被重载的运算符必须保持预定义的的优先级与结合性;(4)应尽量使重载的运算符语义自然、好理解;(5)注意各运算符之间的联系。2类模板:template <class Type>class 类名 ;(1)每一个类模板的成员函数的外部定义,都与一般函数模板的定义一样,必须以类型形参开始,此外还应加以函数返回值类型、类范围、函数名、形参序列,类名后面必须加上类型形参。(2)类模板是类的抽象类型,它的实例化是生成一个具体的类。三、实验内

24、容及步骤1分析教程“函数模板”中的例子,自行设计一个简单的类模板。2分析教程“运算符重载”中的例子,自行设计一个简单的重载运算符。3指出下面程序中的错误,改正并运行。#include<iostream.h>class Point private:int x1,x2;public:Point(int x,int y) x1=x;x2=y;int x_cord()return x1;int y_cord()return x2;main()Point data(5,6);cout<<data.x_cord()<<endl;cout<<data.y_co

25、rd()<<endl;Point more_data20;实验七 文件操作一、实验目的1掌握基本的输入输出操作及格式;2用C+预定义的文件I/O类进行文件输入输出。二、知识要点文件操作:打开文件、读写文件、关闭文件。低层次I/O机制:int creat()、int open()、int close()、int read()、int write()高层次I/O机制:字符I/O函数getchar()、字符串I/O函数gets()、格式化I/O函数printf()流类库:streambuf类、ios类、ostream类、istream类、iostream类三、实验内容及步骤1使用I/O流

26、以文本方式建立一个文件test1.txt,写入字符“已成功写入!”#include<fstream.h>void main() ofstream file1(“test1.txt”);file1<<”已成功写入!”;file1.close();模仿以上程序,编制一段源程序,使用I/O流以文本方式打开test1.txt,读出内容并显示出来。2设字符串string=”1 2 3 4 5 6 7 8 9”,用串I/O的方法编程逐个读取这个串的每个数,直到读完为止,并在屏幕上输出。#include <iostream.h>#include <strstrea.

27、h>void main()int n;char string="1 2 3 4 5 6 7 8 9"istrstream s(string);while(!s.eof()s >>n;cout <<n<<" "cout <<endl;实验八 利用AppWizard向导生成Windows应用程序一、实验目的学习利用Appwizard向导开发Windows应用程序的过程。二、实验内容术语:AppWizard是一个工具,利用该工具,你可以创建一个建立在MFC基础上的窗口应用程序框架,然后在这个框架中加上自己的

28、应用逻辑。你可以选择所创建的应用类型,最常用的是多文档应用(就象你用的字编辑器Microsoft Word一样,可以同时打开多个文档窗口的应用)、单文档应用(类似于Windows提供的notepad,一次只能打开一个文档)和对话框应用(类似于Windows的时钟程序)。1、用AppWizard建立一个单文档应用程序,在窗口中输出”Hello,World!”2、用AppWizard建立一个对话框应用程序,在对话框上摆放相应控件。程序结果如下图:三、实验步骤1、创建一个新项目利用Developer Studio的AppWizard创建一个新的项目,步骤如下:1. 选择菜单File|New,系统将显

29、示New对话框2. 选择Projects标签,在显示的项目类型中选择MFC AppWizard(exe)3. 在右边的Project Name编辑框中输入项目名称,如“helloMFC”,然后按OK4. MFC AppWizard 将分几步询问你有关要建立的新项目的配置。第一个对话框问你是创建哪种类型的应用(单文档、多文档还是对话框类型),选择创建单文档应用“Single document”,然后按Next按钮5. 翻过后面的五个页面(按Next),每个页面可以让你改变项目的不同选项,这个例子暂时不设置这些选项。6. 最后一个MFC AppWizard屏幕告诉你App Wizard为你自动产生

30、的类。单击Finish键,AppWizard显示一个关于该项目的摘要,列出这些类和你所选择的特征。如图所示:图5-1 最后一个MFC AppWizard屏幕7. 单击OK,系统自动产生helloMFC所需要的文件。2、浏览helloMFC项目当你用MFC AppWizard创建了helloMFC项目后,这个项目的工作区窗口将会打开,工作区窗口(如下图):图5-2 打开helloMFC项目后的工作区窗口你可以先选择FileView看一下AppWizard为你创建了哪些文件,然后选择ClassView看一下定义了哪些类。ClassView中还可以看到一个Globals文件夹,单击它前面的加号,可以

31、看到,有一个预定义的全局变量theApp,这是你的Windows应用程序类的对象。3、编译连接运行按F7或者选择菜单Build|Build helloMFC.exe,编译连接得到可执行程序,再按Ctrl+F5或者选择Build|Execute helloMFC.exe运行该程序。程序的结果如下:图5-3 编译连接运行的结果4、用MFC处理输出现在修改程序。要在程序中间的窗口上显示一行文字“Hello, World” ,步骤如下:1、 在工作区窗口中选择ClassView标签,单击helloMFC classes前面的加号(如果已经变成减号则不做此操作)1、 单击类CHelloMFCView类前

32、面的加号1、 双击OnDraw()函数,在右边的文档将显示窗口显示文件helloMFCView的内容,并且自动将光标定位到函数OnDraw()处。1、 修改OnDraw函数的定义,在最后一行加一句:pDC->TextOut(50,50,"Hello, World");1、 按Ctrl+s或者选菜单File|Save来保存所作的修改5、编译连接并运行重新编译连接该项目,运行程序,也可以用Ctrl+F5直接运行程序,系统将询问是否重新编译该项目,回答“是(Yes)”,如果有编译错误,仔细检查你加的一句话,是否有错。当编译连接通过后,系统会自动运行该程序。查看结果。三实验要

33、求1、写出程序,并调试程序,要给出测试数据和实验结果。2、整理上机步骤,总结经验和体会。3、完成实验报告和上交程序。实验九 消息处理一、实验目的1、 掌握MFC中消息映射的机制;2、 学习手动添加消息映射函数的方法。二、实验内容1、在单文档应用程序中添加鼠标左键消息处理函数,实现在视图中绘制椭圆消息映射简单说明:当用户在视图窗口中按下鼠标左键时,Windows发送一个消息,即WM_LBUTTONDOW消息到这个窗口。如果程序需要对WM_LBUTTONDOW做出响应,视图类必须有一个类似如下的成员函数:void Cex6View:OnLButtonDown(UINT nFlags, CPoint

34、 point) / TODO: Add your message handler code here and/or call default在类头文件中,也必须有相应的原型说明:afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg标志是一个“非运算符”,警告这是消息映射函数的原型。然后在代码文件中,还需要一个消息映射宏,把OnLButtonDown函数连接到应用程序框架上。BEGIN_MESSAGE_MAP(CEx4View, CView)/AFX_MSG_MAP(CEx4View)ON_WM_LBUTTONDOWN()/A

35、FX_MSG_MAPEND_MESSAGE_MAP()最后在类的头文件中需要使用如下语句:DECLARE_MESSAGE_MAP()以上代码都可以用Visual C+提供的ClassWizard工具,它自动对大多数消息生成响应函数,并在相应位置添加如上所示的代码。具体步骤如下:1、使用AppWizard生成名为Ex6的SDI工程。2、添加m_rectEllipse和m_nColor数据成员到CEx4View:把Workspace窗口设置为ClassWizard,右击Cex6View,选定Add Member Variable,然后插入如下两个数据成员:Private:Crect m_rectE

36、llipse;Int m_nColor;3、 使用ClassWizard添加Cex6View类消息处理程序:按下Ctrl+W,出现MFC ClassWizard对话框时,确保选定CEx4View类,如下图所示。现在,在Object IDs列表框的顶部单击Cex6View,然后,在消息列表框中滚动虚函数,并双击WM_LBUTTONDOWN。OnLButttonDown函数名应当出现在Member Functions列表框内部。 图6-1 MFC ClassWizard 窗口确定后,在Ex6View.cpp和Ex6View.h以下位置就会添加加黑的代码:/Ex6View.hprotected:/A

37、FX_MSG(Cex6View)afx_msg void OnLButtonDown(UINT nFlags, CPoint point);/AFX_MSGDECLARE_MESSAGE_MAP()/Ex4View.cppBEGIN_MESSAGE_MAP(Cex6View, CView)/AFX_MSG_MAP(Cex6View)ON_WM_LBUTTONDOWN()/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIREC

38、T, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()void Cex6View:OnLButtonDown(UINT nFlags, CPoint point) 4、在Ex6View.cpp中编辑OnLButttonDown代码,如下:void Cex6View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call d

39、efaultif(m_rectEllipse.PtInRect(point)if(m_nColor=GRAY_BRUSH)m_nColor=WHITE_BRUSH;elsem_nColor=GRAY_BRUSH;InvalidateRect(m_rectEllipse);5、在Ex6View.cpp中编辑构造函数和OnDraw函数,如下:Cex6View:Cex6View():m_rectEllipse(0,0,200,200)m_nColor=GRAY_BRUSH;.void Cex6View:OnDraw(CDC* pDC)pDC->SelectStockObject(m_nColo

40、r);pDC->Ellipse(m_rectEllipse);6、建立并运行程序。2、在对话框中添加自定义消息函数,实现动态按钮。步骤如下:1) 建立一个基于对话框的MFC工程.2) 在对话框中添加动态按钮。(1) 建立控件ID号:ID号是控件的标识,创建控件前必须先为它设置一个ID号。打开资源中的“String Table”,在空白行上双击鼠标,这时会弹出一个ID属性对话框,在其中的ID编辑框中输入ID,如:IDC_MYBUTTON,在Caption中输入控件标题或注解(注:Caption框不能为空,为空会导致创建失败),这里我输入的是按钮上要显示的文字-动态按钮。(2)在OnInitDialog()函数中添加如下代码:用new调用CButton构造函数生成一个实例:CButton *p_MyBut = new CButton();然后用CButton类的Create()函数创建: p_MyBut->Create

温馨提示

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

评论

0/150

提交评论