第一范文网 - 专业文章范例文档资料分享平台

《C--面向对象程序设计》实验指导书(彭成)word版本

来源:用户分享 时间:2025/5/23 16:14:21 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

《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 using namespace std;

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 using namespace std;

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 #include using namespace std;

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 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 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 class 类名 { …};

(1)每一个类模板的成员函数的外部定义,都与一般函数模板的定义一 样,必须以类型形参开始,此外还应加以函数返回值类型、类范围、函数名、 形参序列,类名后面必须加上类型形参。

(2)类模板是类的抽象类型,它的实例化是生成一个具体的类。

三、实验内容及步骤

1.分析教程“函数模板”中的例子,自行设计一个简单的类模板。 2.分析教程“运算符重载”中的例子,自行设计一个简单的重载运算符。 3.指出下面程序中的错误,改正并运行。 #include 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<

收集于网络,如有侵权请联系管理员删除

精品文档

实验六 文件操作

一、实验目的

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 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 #include void main() { int n;

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、完成实验报告和上交程序。

收集于网络,如有侵权请联系管理员删除

《C--面向对象程序设计》实验指导书(彭成)word版本.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1dyth4ga3y2p7v43zg0p6rgfk15t3500h90_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top