《C--面向对象程序设计》实验指导书(彭
成)
精品文档
《C++面向对象程序设计》
实验指导书
主讲:彭成
湖南工业大学计算机学院
2016-9-20
收集于网络,如有侵权请联系管理员删除
精品文档
目 录
实验一 DEV C++开发环境及C++程序的上机过程 .............................. 4 实验二 类的定义和使用 .......................................................................... 8 实验三 类的继承和派生 ......................................................................... 12 实验四 多态性程序设计 ........................................................................ 14 实验五 运算符重载和类模板 ................................................................. 16 实验六 文件操作 ..................................................................................... 19 实验七 利用AppWizard向导生成Windows应用程序 ........................ 21 实验八 消息处理 ..................................................................................... 25 实验九 文档/视图结构 ........................................................................... 30 实验十 对话框设计 ................................................................................. 32
收集于网络,如有侵权请联系管理员删除
精品文档
实验一 DEV C++开发环境及C++程序的上机过程
一、实验目的
1、 了解和使用C++集成开发环境; 2、 熟悉C++环境的基本命令和功能键; 3、 熟悉常用的功能菜单命令 ; 4、 学习使用C++环境的帮助 ; 5、 学习完整的C++程序开发过程 ; 6、 理解简单的C++程序结构
二、实验内容
使用Visual C++ 6.0集成环境来编辑、编译并运行下面简单C++程序: 1.#include
using namespace std; int main()
{
cout<<\}
2.#include
int max(int,int); //声明自定义函数 int main() //主函数 {
int a,b,c;
cout<<\cin>>a>>b;
c=max(a,b); //调用max函数,将得到的值赋给C cout<<\}
收集于网络,如有侵权请联系管理员删除
精品文档
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带回调用处
}
三、实验步骤
Dev-C++是一个Windows环境下C/C++的集成开发环境(IDE),它是一款自由软件,遵守GPL许可协议分发源代码。使用起来非常方便。对于初学者而言还是有些迷茫。首先来看看如何建立一个项目。如图1-1所示。
图1-1 DEV C++ 用户界面
1、创建新工程
1. (1)打开Dev-C++,单击文件--新建--项目后,会出现一个对话框。选择第二个console application(控制台程序)。如图1-2所示。
收集于网络,如有侵权请联系管理员删除
精品文档
(2)在名称的输入框中可以为自己的项目取个名字。如果是使用C语言的话,就把“C项目”前的单选框点中。单击确定会出现一个框,提示把刚才建立的项目保存在哪里。
(3)保存完成之后,就进入程序的编辑了。可以看到Dev-C++已经自动写好了一些代码,这几行代码通常情况下都是必须的。如图1-3所示。
收集于网络,如有侵权请联系管理员删除
精品文档
(4)输入几句简单的代码,把不需要的地方删掉。Dev-C++会自动匹配单括号‘(’和引号'“',所以没有必要敲两次,这也是我从VC++用惯之后转用Dev-C++常遇到的问题。单击编译,看看程序有没有错。编译的时候,提示要把这个程序先保存。
(5)编译没有问题后,就可以执行了。
收集于网络,如有侵权请联系管理员删除
精品文档
2.根据实验步骤1-5,建立、编译并运行实验程序。
四、实验要求
1. 复习教材有关内容,调试书上相应章节程序实例。 2. 掌握C++控制台程序的开发、调试步骤。 3. 完成实验报告。
实验二 类的定义和使用
一、实验目的
1、 理解面向对象程序设计方法的基本原理及主要特点——抽象、封装、继承
和多态。
2、 理解类和对象的概念以及如何利用类来解决具体问题。
二、实验内容
1、 掌握面向对象的程序设计思想 2、 掌握类的定义。 3、 掌握对象的声明和引用。
4、 掌握具有不同访问属性的成员的访问方式 5、 观察构造函数和析构函数的执行过程。
收集于网络,如有侵权请联系管理员删除
精品文档
三、实验步骤
类的定义和使用 #include
class Car //定义类Car {
//成员函数
public:
void disp_welcomemsg(); //声明disp_welcomemsg()函数
int get_wheels(); //声明get_wheels()函数
void set_wheels(int); //声明set_wheels()函数
//数据成员
private: };
void Car::disp_welcomemsg() //类成员函数disp_welcomemsg()的实现 { }
int Car::get_wheels() //类成员函数get_wheels()的实现,获取车轮数
cout << \int m_nWheels;
收集于网络,如有侵权请联系管理员删除
精品文档
{ }
void Car::set_wheels(int n) //类成员函数set_wheels()实现,设置车轮数 { }
int main() {
Car mycar; //定义类对象mycar m_nWheels = n; return m_nWheels;
mycar.disp_welcomemsg(); //访问成员函数,显示欢迎信息
mycar.set_wheels(4); //访问成员函数,设置车轮数量
//访问成员函数,显示车轮数量
cout << \system(\return 0;
}编译、连接并运行程序
四、实验要求
1、 写出程序,并调试程序,要给出测试数据和实验结果。 2、 整理上机步骤,总结经验和体会。 3、 完成实验报告和上交程序。
收集于网络,如有侵权请联系管理员删除
精品文档
收集于网络,如有侵权请联系管理员删除
精品文档
实验三 类的继承和派生
一、实验目的
1、 理解继承的含义,掌握派生类的定义方法和实现;
2、 理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地
访问继承层次中的各种类成员;
3、 理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便
派生类成员可以访问基类的部分非公开的成员;
4、 理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影
响,能够对使用虚函数的简单程序写出程序结果。
二、实验内容
1. 掌握继承和派生的概念,派生类的定义方法。 2. 熟悉继承的不同方式对基类成员的访问控制
3. 掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺
序。 先执行所有基类的构造函数(顺序按照定义派生类时指定的各基关顺序) 再执行对象成员所在类的构造函数(顺序按照它们在类中的声明顺序) 最后执行派生类构造函数体中的内容。
三、实验步骤
1、派生类的定义和执行
#include
class Animal //定义Animal类 { public:
收集于网络,如有侵权请联系管理员删除
精品文档
};
void speak() //成员函数 { }
cout << \
class Cat :public Animal //定义Animal的派生类Cat { public: private: }; int main() {
Cat cat(\定义派生类对象 cat.print_name();
cat.speak(); //派生类对象使用基类成员函数 system(\return 0;
string m_strName; //数据成员,记录猫名称 Cat(string con_name) :m_strName(con_name){} //构造函数 void print_name() //成员函数,显示猫的名称 { }
cout << \
}编译、连接并运行程序
四、实验要求
收集于网络,如有侵权请联系管理员删除
精品文档
1. 写出程序,并调试程序,要给出测试数据和实验结果。 2. 调试相应章节的程序实例,观察运行结果。 3. 整理上机步骤,总结经验和体会。 4. 完成实验报告和上交程序。
实验四 多态性程序设计
一.实验目的
1、 理解多态性的基本概念; 2、 掌握虚函数和纯虚函数的概念;
3、 了解抽象类的概念。
二.实验内容
1、理解多态性的基本思想。 2、学习使用虚函数实现动态多态性。
三、实验步骤
多态性编程实例
#include
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 double sum() {
double score; score=x1+y1+z1; return score; }
protected: double z1; };
void fn(chuzhong & chu) {
cout< void main() { chuzhong cz(85.5,95.5); gaozhong gz(75.5,78.5,80.5); fn(cz); fn(gz); } 编译、连接并改正程序中的错误。 四.实验要求 1. 写出程序,并调试程序,要给出测试数据和实验结果。 2. 调试相应章节的程序实例,观察运行结果。 3. 整理上机步骤,总结经验和体会。 4. 完成实验报告和上交程序。 收集于网络,如有侵权请联系管理员删除 精品文档 实验五 运算符重载和类模板 一、实验目的 1.掌握C++中运算符重载的机制和运算符重载的方式; 2.掌握类型转换的方式、内存的动态分配; 3.掌握类模板的定义,掌握类模板的实例化。 二、知识要点 1.运算符重载 成员函数方式: 单目(返回类型 类名 ∷operator 单目运算符( )) 双目(返回类型 类名∷operator 双目运算符(类名&引用 )) 下标运算符重载: 类型 类名∷operator[ ](下标类型形参) { 函数体 } 提取符重载: 预定义插入符 ostream & ostream∷operator<<(type &obj); 预定义提取符 istream & istream∷operator>>(type &obj); 收集于网络,如有侵权请联系管理员删除 精品文档 运算符重载规则: (1)不可以重载非C++的运算符; (2)运算符重载可以采用成员函数方式或友元方式; (3)被重载的运算符必须保持预定义的的优先级与结合性; (4)应尽量使重载的运算符语义自然、好理解; (5)注意各运算符之间的联系。 2.类模板: template (1)每一个类模板的成员函数的外部定义,都与一般函数模板的定义一 样,必须以类型形参开始,此外还应加以函数返回值类型、类范围、函数名、 形参序列,类名后面必须加上类型形参。 (2)类模板是类的抽象类型,它的实例化是生成一个具体的类。 三、实验内容及步骤 1.分析教程“函数模板”中的例子,自行设计一个简单的类模板。 2.分析教程“运算符重载”中的例子,自行设计一个简单的重载运算符。 3.指出下面程序中的错误,改正并运行。 #include 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< 收集于网络,如有侵权请联系管理员删除 精品文档 实验六 文件操作 一、实验目的 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流以文本方式建立一个文件test1.txt,写入字符“已成功写入!” #include { 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 char string[]=\istrstream s(string); while(!s.eof()){ s >>n; cout < cout < 收集于网络,如有侵权请联系管理员删除 精品文档 实验七 利用AppWizard向导生成 Windows应用程序 一、实验目的 学习利用Appwizard向导开发Windows应用程序的过程。 二、实验内容 术语:AppWizard是一个工具,利用该工具,你可以创建一个建立在 MFC基础上的窗口应用程序框架,然后在这个框架中加上自己的应用逻辑。你可以选择所创建的应用类型,最常用的是多文档应用(就象你用的字编辑器Microsoft Word一样,可以同时打开多个文档窗口的应用)、单文档应用(类似于Windows提供的notepad,一次只能打开一个文档)和对话框应用(类似于Windows的时钟程序)。 1、用AppWizard建立一个单文档应用程序,在窗口中输出”Hello,World!” 2、用AppWizard建立一个对话框应用程序,在对话框上摆放相应控件。程序结果如下图: 三、实验步骤 1、创建一个新项目 利用Developer Studio的AppWizard创建一个新的项目,步骤如下: 1. 选择菜单File|New,系统将显示New对话框 2. 选择Projects标签,在显示的项目类型中选择MFC AppWizard(exe) 3. 在右边的Project Name编辑框中输入项目名称,如“helloMFC”,然后按 OK 4. MFC AppWizard 将分几步询问你有关要建立的新项目的配置。第一个对话 收集于网络,如有侵权请联系管理员删除 精品文档 框问你是创建哪种类型的应用(单文档、多文档还是对话框类型),选择创建单文档应用“Single document”,然后按Next按钮 5. 翻过后面的五个页面(按Next),每个页面可以让你改变项目的不同选 项,这个例子暂时不设置这些选项。 6. 最后一个MFC AppWizard屏幕告诉你App Wizard为你自动产生的类。单击 Finish键,AppWizard显示一个关于该项目的摘要,列出这些类和你所选择的特征。如图所示: 图5-1 最后一个MFC AppWizard屏幕 7. 单击OK,系统自动产生helloMFC所需要的文件。 2、浏览helloMFC项目 当你用MFC AppWizard创建了helloMFC项目后,这个项目的工作区窗口将会打开,工作区窗口(如下图): 收集于网络,如有侵权请联系管理员删除 精品文档 图5-2 打开helloMFC项目后的工作区窗口 你可以先选择FileView看一下AppWizard为你创建了哪些文件,然后选择ClassView看一下定义了哪些类。ClassView中还可以看到一个Globals文件夹,单击它前面的加号,可以看到,有一个预定义的全局变量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类前面的加号 1、 双击OnDraw()函数,在右边的文档将显示窗口显示文件helloMFCView的 内容,并且自动将光标定位到函数OnDraw()处。 1、 修改OnDraw函数的定义,在最后一行加一句: pDC->TextOut(50,50,\1、 按Ctrl+s或者选菜单File|Save来保存所作的修改 5、编译连接并运行 重新编译连接该项目,运行程序,也可以用Ctrl+F5直接运行程序,系统将询问是否重新编译该项目,回答“是(Yes)”,如果有编译错误,仔细检查你加的一句话,是否有错。当编译连接通过后,系统会自动运行该程序。查看结果。 三.实验要求 1、写出程序,并调试程序,要给出测试数据和实验结果。 2、整理上机步骤,总结经验和体会。 3、完成实验报告和上交程序。 收集于网络,如有侵权请联系管理员删除 精品文档 实验八 消息处理 一、实验目的 1、 掌握MFC中消息映射的机制; 2、 学习手动添加消息映射函数的方法。 二、实验内容 1、在单文档应用程序中添加鼠标左键消息处理函数,实现在视图中绘制椭圆 消息映射简单说明:当用户在视图窗口中按下鼠标左键时,Windows发送一个消息,即WM_LBUTTONDOW消息到这个窗口。如果程序需要对WM_LBUTTONDOW做出响应,视图类必须有一个类似如下的成员函数: void Cex6View::OnLButtonDown(UINT nFlags, CPoint 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() //}}AFX_MSG_MAP END_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_rectEllipse; 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.h protected: //{{AFX_MSG(Cex6View) afx_msg void OnLButtonDown(UINT nFlags, CPoint point); //}}AFX_MSG DECLARE_MESSAGE_MAP() //Ex4View.cpp BEGIN_MESSAGE_MAP(Cex6View, CView) //{{AFX_MSG_MAP(Cex6View) ON_WM_LBUTTONDOWN() //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, 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 default if(m_rectEllipse.PtInRect(point)){ if(m_nColor==GRAY_BRUSH) { m_nColor=WHITE_BRUSH; } else{ m_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_nColor); pDC->Ellipse(m_rectEllipse); } 6、建立并运行程序。 2、在对话框中添加自定义消息函数,实现动态按钮。 步骤如下: 1) 2) 建立一个基于对话框的MFC工程. 在对话框中添加动态按钮。 (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( \动态按钮\CRect(20,10,80,40), this, IDC_MYBUTTON ); (3) 动态控件的响应 修改一下黑体位置中的代码(其中ON_BN_CLICKED是按钮单击消息):BEGIN_MESSAGE_MAP(CTextEditorView, CFormView) //{{AFX_MSG_MAP(CTextEditorView) ON_BN_CLICKED(ID_MYBUT1, OnMyFunction) //}}AFX_MSG_MAP END_MESSAGE_MAP() 在头文件中添加响应函数原型(如黑体显示): protected: //{{AFX_MSG(CTextEditorView) afx_msg void youFunction(); //}}AFX_MSG DECLARE_MESSAGE_MAP() 最后在CPP文件编写响应函数代码: 3) 建立并运行程序。 三.实验要求 1、写出程序,并调试程序,要给出测试数据和实验结果。 2、整理上机步骤,总结经验和体会。 3、完成实验报告和上交程序。 收集于网络,如有侵权请联系管理员删除 精品文档 实验九 文档/视图结构 一、实验目的 掌握CDC和GDI的基本用法。 二、实验内容 编写程序完成绘制连续线条的功能,并能对线条的颜色和宽度进行修改。示例图如下: 图7-1 程序示例图 相关知识点: 1、任何时候当程序需要直接在屏幕或打印机上绘图的时候,都需要调用GDI函数,GDI函数包含了一些用于绘制图形、位图以及文本的函数。 收集于网络,如有侵权请联系管理员删除 精品文档 2、Windows的设备环境是GDI的关键元素,它代表了物理设备。每一个C++设备环境对象都有与之对应的Windows设备环境,并且通过一个32位类型的HDC句柄来标识。 3、MFC库设备环境类基类CDC包含了绘图所需要的所有成员函数,并且几乎所有派生类只有构造函数和析构函数不同(CMetaFileDC类除外)。对于显示器来说,常用的派生类有CClientDC 和 CWindowDC,而对其它设备(如打印机或内存缓冲区),则可以构造一个基类CDC的对象。对于显示器和打印机设备环境对象来说,应用程序框架会直接将句柄附在对象上;而对其它设备环境(如内存设备环境),为了将对象与句柄相联系,在构造完对象之后,还必须调用一个成员函数(进行初试化)。 三.实验要求 1、写出程序,并调试程序,要给出测试数据和实验结果。 2、整理上机步骤,总结经验和体会。 3、完成实验报告和上交程序。 收集于网络,如有侵权请联系管理员删除 精品文档 实验十 对话框设计 一、实验目的 1、掌握MFC中建立模式与非模式对话框的步骤 2、掌握为控件添加成员变量的方法。 二、实验内容 1、使用对话框和编辑控件、按钮控件编写一个程序实现一个完成四则运算的运算器。 2、建立对话框应用程序,使程序启动时同时显示两个对话框,且两个对 话框均可被激活。 提示: m_secondDlg.create(IDD_DIALOG2,this); m_secondDlg.ShowWindow(SW_SHOW) 三.实验要求 1、写出程序,并调试程序,要给出测试数据和实验结果。 2、整理上机步骤,总结经验和体会。 3、完成实验报告和上交程序。 收集于网络,如有侵权请联系管理员删除
相关推荐: