C++面向对象程序设计实验指导书

更新时间:2024-03-20 03:42:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C++面向对象程序设计实验指导书

(v1.0)

刘恒洋 谭智编

重庆工学院计算机学院

2007年9月

C++面向对象程序设计实验指导书 目录

目录

绪论 .................................................................................................................................................. 1

0.1 写本书的目的 .................................................................................................................... 1 0.2 本书的结构安排 ................................................................................................................ 1 0.3 如何使用本书 .................................................................................................................... 2 实验一 C++基础 ............................................................................................................................. 3

1.1 实验目的 ............................................................................................................................ 3 1.2 实验内容 ............................................................................................................................ 3

1.2.1 程序阅读 ................................................................................................................. 3 1.2.2 程序设计 ................................................................................................................. 6 1.3 思考题 ................................................................................................................................ 7 实验二 类和对象—类的构建 ......................................................................................................... 8

2.1 实验目的 ............................................................................................................................ 8 2.2 实验内容 ............................................................................................................................ 8

2.2.1程序阅读 .................................................................................................................. 8 2.2.2 程序设计 ............................................................................................................... 10 2.3思考题 ............................................................................................................................... 10 实验三 类和对象—构造函数与析构函数 ................................................................................... 11

3.1 实验目的 .......................................................................................................................... 11 3.2 实验内容 .......................................................................................................................... 11

3.2.1程序阅读 ................................................................................................................ 11 3.2.2 程序设计 ............................................................................................................... 12 3.3思考题 ............................................................................................................................... 13 实验四 类和对象—对象传递与静态成员 ................................................................................... 14

4.1 实验目的 .......................................................................................................................... 14 4.2 实验内容 .......................................................................................................................... 14

4.2.1程序阅读 ................................................................................................................ 14 4.2.2 程序设计 ............................................................................................................... 17

实验五 派生与继承—单重派生 ................................................................................................... 18

5.1 实验目的 .......................................................................................................................... 18 5.2 实验内容 .......................................................................................................................... 18

5.2.1程序阅读 ................................................................................................................ 18 5.2.2 程序设计 ............................................................................................................... 20

实验六 派生与继承—多重派生 ................................................................................................... 21

6.1 实验目的 .......................................................................................................................... 21 6.2 实验内容 .......................................................................................................................... 21

6.2.1程序阅读 ................................................................................................................ 21 6.2.2 程序设计 ............................................................................................................... 24 6.3思考题 ............................................................................................................................... 24 实验七 多态性—函数与运算符重载 ........................................................................................... 25

7.1 实验目的 .......................................................................................................................... 25 7.2 实验内容 .......................................................................................................................... 25

7.2.1程序阅读 ................................................................................................................ 25

I

C++面向对象程序设计实验指导书 目录

7.2.2 程序设计 ............................................................................................................... 27 7.3思考题 ............................................................................................................................... 28 实验八 多态性—类型转换与虚函数 ........................................................................................... 29

8.1 实验目的 .......................................................................................................................... 29 8.2 实验内容 .......................................................................................................................... 29

8.2.1程序阅读 ................................................................................................................ 29 8.2.2 程序设计 ............................................................................................................... 31 8.3思考题 ............................................................................................................................... 31 实验九 模板类的构造 ................................................................................................................... 32

9.1 实验目的 .......................................................................................................................... 32 9.2 实验内容 .......................................................................................................................... 32

9.2.1程序阅读 ................................................................................................................ 32 9.2.2 程序设计 ............................................................................................................... 34 9.3思考题 ............................................................................................................................... 34 实验十 C++的I/O流类库 ............................................................................................................ 35

10.1 实验目的 ........................................................................................................................ 35 10.2 实验内容 ........................................................................................................................ 35

10.2.1程序阅读 .............................................................................................................. 35 10.2.2 程序设计 ............................................................................................................. 36 10.3思考题 ............................................................................................................................. 36 实验十一 C++程序、Windows程序和MFC程序 ..................................................................... 38

11.1 实验目的 ........................................................................................................................ 38 11.2 实验内容 ........................................................................................................................ 38

11.2.1 实验描述 ............................................................................................................. 38 11.2.2 实验步骤 ............................................................................................................. 39 11.2.3 实验结果分析 ..................................................................................................... 45 11.3思考题 ............................................................................................................................. 47 实验十二 简单单文档MFC程序设计 .................................................................................. 48

12.1 实验目的 ........................................................................................................................ 48 12.2 实验内容 ........................................................................................................................ 48

12.2.1 实验描述 ............................................................................................................. 48 12.2.2 实验步骤 ............................................................................................................. 49 12.2.3 实验结果 ............................................................................................................. 54 12.3思考题 ............................................................................................................................. 55 实验十三 简单对话框程序设计 ............................................................................................. 56

13.1 实验目的 ........................................................................................................................ 56 13.2 实验内容 ........................................................................................................................ 56

13.2.1 实验描述 ............................................................................................................. 56 13.2.2 实验步骤 ............................................................................................................. 56 13.2.3 实验结果 ............................................................................................................. 63 13.3思考题 ............................................................................................................................. 63 实验十四 简单数据库程序设计 ............................................................................................. 65

14.1 实验目的 ........................................................................................................................ 65 14.2 实验内容 ........................................................................................................................ 65

II

C++面向对象程序设计实验指导书 目录

14.2.1 实验描述 ............................................................................................................. 65 14.2.2 实验步骤 ............................................................................................................. 66 14.2.3 实验结果 ............................................................................................................. 73 14.3思考题 ............................................................................................................................. 74 综合练习 ........................................................................................................................................ 75 总结 ................................................................................................................................................ 76 参考书目 ........................................................................................................................................ 77

III

C++面向对象程序设计实验指导书 绪论

绪论

0.1 写本书的目的

面向对象程序设计语言是现今最流行的编程语言之一,C++语言是作为最早最流行的面向对象编程语言之一而发展起来的。学好C++语言不仅可以从面向过程的程序设计思想过渡到面向对象的程序设计思想,而且可以为以后学习其它的面向对象语言打下坚实的基础,使得学习其它的面向对象编程语言变得轻松、容易。 实验作为学习C++语言不可缺少的一个环节不仅可以加深学生对C++面向对象思想的理解,同时可以提高学生的动手编程能力,培养学生良好的编码习惯。目前关于C++语言的理论教材比较多,但是适合学生练习的实验指导书却比较少,这严重影响了学生对C++这门课程的学习。大多数情况下,学生学习C++语言之前都刚刚学习过C语言程序设计这门课程,从编程环境到编程语言同时转换过来需要一定的时间和合理的指引,同时在学习C++理论知识的过程中,学生很少也很难把C++程序设计和现在社会上比较流行的基于VC6.0的MFC程序设计联系起来,所以很难让学生在学习C++语言的同时,提升学生基于VC6.0的MFC程序设计的能力。编写本书的目的就是从以上几点来考虑的,首先要把学生从以前的编程环境中脱离出来,然后循序渐进地介绍新的编程环境的新知识点,同时把C++的语法结构融入到基于VC6.0的MFC程序设计中去,从而实现学生轻松掌握C++这门程序设计语言和习惯编程环境以及理解C++语法和MFC之间的关系的目的,从而提高学生的程序设计能力和学生程序设计的成就感。

0.2 本书的结构安排

实验课程的安排离不开理论课程的学习,本书的编排以知识点为核心,理论教材蓝本为《C++面向对象程序设计教程》(第2版)陈维兴 林小茶编著,清华大学出版社出版。通过为不同的知识点设计相应的实验程序,来达到学生练习和理解C++语言面向对象的思想的目的,同时本书还设计了一些程序设计课后练习题,设计本部分有三个目的:一个是有些课堂练习中没有办法练习到的知识点将在这部分体现,指导老师可以根据需要来增删课堂的讲解内容;另一个是为一部分有能力有兴趣深入学习C++程序设计的同学提供一些练习题,从而提升这部分学生的程序设计能力;第三就是避免有些学生在做实验的过程中盲目按照指导书中的步骤一步一步地不加思考地写程序,学生要回答这些问题,就必须看懂这些程序中隐含的知识点,从而达到理论知识和实践知识更好地结合。 对于课堂练习,本书共安排了十个实验,共32个学时,实验安排如下: 实验一 C++基础 (2学时) 实验二 类和对象—类的构建 (2学时) 实验三 类和对象—构造函数与析构函数 (2学时) 实验四 类和对象—对象传递与静态成员 (2学时) 实验五 派生与继承—单重派生 (2学时) 实验六 派生与继承—多重派生 (2学时) 实验七 多态性—函数与运算符重载 (2学时)

1

C++面向对象程序设计实验指导书 实验四

}

问题一:以上程序有两大错误,试指出来,并改正之?

3.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include \ class Date {

private:

const int year; const int month; const int day; public:

Date(int y,int m,int d); void showdate(); };

Date::Date(int y,int m,int d) {

year = y; month = m; day = d; }

void Date::showdate() {

cout<

void main() {

const Date obj(2007,10,30); obj.showdate(); }

问题一:以上程序有两大错误,试指出来,并改正之(要求主函数和类Date的数据成员属性不可以改动)?

4.2.2 程序设计

1.某商店经销一种货物。货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记录下目录库存的总重量。试用C++模拟商店货物购进和卖出的情况。

17

C++面向对象程序设计实验指导书 实验五

实验五 派生与继承—单重派生

5.1 实验目的

1.理解继承的含义以及声明;

2.理解共有派生、私有派生和保护派生的含义以及使用; 3.理解单派生类中构造函数和析构函数的调用顺序。

5.2 实验内容 5.2.1程序阅读

1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include \

class CBase {

public:

CBase(int a) :a(a) { } protected:

void print() { cout<<\<

class CDerive : public CBase {

public:

void print() { CBase::print(); cout<<\<

18

C++面向对象程序设计实验指导书 实验五

int b; };

void main() {

CDerive d; d.print(); CBase b; b.print(); }

问题一:以上程序有两大错误,试指出来,并改正之?

2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include \

class CBase {

public:

CBase(int a) :a(a) { cout<<\<

~CBase() { cout<<\<

void print() { cout<<\<

class CDerive : public CBase {

public:

CDerive(int a, int b,int c) :CBase(a),b(b),c(c) { cout<<\<

~CDerive() { cout<<\<

19

C++面向对象程序设计实验指导书 实验五

}

void print() { CBase::print(); cout<<\<

CBase b; int c; };

void main() {

CDerive d(1,2,3); -----------------------------------------------------① d.print(); }

问题一:以上程序的输出结果是什么,说明为什么? 问题二:①处语句执行完后,d.b.a的值为多少?

5.2.2 程序设计

1.定义点CPoint类作为基类,在此基础上派生出直线CLine类和圆CCircle类,并要求基类和各派生类具有以下特点:

a.CLine类含有计算直线长度和斜率的成员函数; b.CCircle类含有计算圆面积的成员函数。

20

C++面向对象程序设计实验指导书 实验六

实验六 派生与继承—多重派生

6.1 实验目的

1.理解多重派生的定义;

2.理解多重派生中构造函数与析构函数的调用顺序; 3.理解多重派生中虚拟基类的作用;

6.2 实验内容 6.2.1程序阅读

1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

class CBase1 {

public:

CBase1(int a) :a(a) { cout<<\<

~CBase1() { cout<<\<

void print() { cout<<\<

class CBase2 {

public:

CBase2(int b) :b(b) { cout<<\<

21

C++面向对象程序设计实验指导书 实验七

private:

float real; float imag; };

CComplex &operator--(CComplex &x) {

x.real -= 1; x.imag -= 1; return x; }

void main() {

CComplex obj1(2.1,3.2); CComplex obj2(3.6,2.5); cout<<\; obj1.print(); cout<<\; obj2.print();

CComplex obj3 = obj1 + obj2; cout<<\; obj3.print(); ++obj3;

cout<<\; obj3.print(); --obj3;

cout<<\; obj3.print();

CComplex obj4 = ++obj3; cout<<\; obj4.print(); }

问题一:以上程序中的三个运算符重载都有错误,试改正过来,并分析该程序的输出结果。

7.2.2 程序设计

1.把7.2.1中第一道题的程序改造成采取友元函数重载方式来实现“+”运算符,并采取友元函数重载方式增加前置和后置“++”以及“--”运算符重载,并设计主函数来验证重载运算符的用法。

27

C++面向对象程序设计实验指导书 实验七

7.3思考题

1.定义CPoint类,有两个成员变量:横坐标(x)和纵坐标(y),对CPoint类重载“++”(自增运算符)、“--”(自减运算符),实现对坐标值的改变。(每个函数均采用友元禾成员函数实现)

28

C++面向对象程序设计实验指导书 实验八

实验八 多态性—类型转换与虚函数

8.1 实验目的

1.理解掌握运算符[]、()的重载;

2.理解类型转换,掌握类型转换函数的设计和使用; 3.理解和掌握虚函数的作用;

4.掌握利用虚函数实现C++的运行时多态性; 5.理解纯虚类和抽象类。

8.2 实验内容 8.2.1程序阅读

1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include #include \

class CComplex {

public:

CComplex(double r = 0, double i = 0) { real = r; imag = i; }

int operator int() { return (int)real; }

void Display(void) { cout << \ << real << \ << imag << \ << endl; }

protected:

double real; double imag; };

29

C++面向对象程序设计实验指导书 实验八

class CVector {

public:

CVector(CComplex &obj1, CComplex &obj2, CComplex &obj3, CComplex &obj4) { objArray[0] = obj1; objArray[1] = obj2; objArray[2] = obj3; objArray[3] = obj4; }

friend CComplex &operator[](CVector obj, int n); private:

CComplex objArray[4]; };

CComplex &operator[](CVector obj, int n) {

if(n<0 || n>3) { cout<<\<

return obj.objArray[n]; }

void main() {

CComplex c1(1.1, 1.1); CComplex c2(2.2, 2.2); CComplex c3(3.3, 3.3); CComplex c4(4.4, 4.4);

CVector v(c1,c2,c3,c4);

v[0].Display(); v[1].Display(); v[2].Display(); v[3].Display();

v[0] = 5.5; ----------------------------------------------------------① v[1] = CComplex(6.6); -------------------------------------------② v[2] = int(CComplex(7.7)); --------------------------------------③ v[3] = int(CComplex(8.8,9.9)); ----------------------------------④

30

C++面向对象程序设计实验指导书 实验八

}

v[0].Display(); v[1].Display(); v[2].Display(); v[3].Display();

问题一:上述程序存在两大错误,在不修改主函数和程序原意的前提下,改正该程序中存在的错误。

问题二:①处的转换属于显式转换还是隐式转换,并解释该转换过程。 问题三:②处的转换属于显式转换还是隐式转换,并解释该转换过程。 问题四:解释③处的转换过程。 问题五:解释④处的转换过程。

8.2.2 程序设计

1.编写一个程序计算三角形、正方形和圆形的面积,要求抽象出一个基类base,在其中说明一个虚函数,用来求面积,并利用单接口,多实现版本设计各图形面积的方法。

8.3思考题

1.设计一个汽车类Motor,该类具有可载人数、轮胎数、马力数、生产厂家和车主五个数据成员,根据Motor类派生出Car类、Bus类和Truck类。其中Bus类除继承基类的数据成员外,还具有表示车厢节数的数据成员Number;Truck类除继承基类的数据成员之外,还具有表示载重量的数据成员Weight。每个类都具有成员函数Display,用于输出各类对象的相关信息。要求设计一个统一的显示相关信息的全局函数ShowInfo在主函数种调用,主函数中不直接调用类里面的Display函数。

31

C++面向对象程序设计实验指导书 实验十

存储信息的格式如下:

姓名:张三

学号:10521030146 性别:男

d.停止输入后,程序读出存储到stureginfo.txt文件中的所有信息,并显示在屏幕上。

37

C++面向对象程序设计实验指导书 实验十一

实验十一 C++程序、Windows程序和MFC

程序

11.1 实验目的

1.理解C++程序、Windows程序以及MFC程序之间的联系与区别; 2.理解Windows程序的消息机制;

3.学会应用VC++6.0的AppWizard创建基于MFC的Windows程序; 4.理解C++在MFC中的位置和作用。

11.2 实验内容 11.2.1 实验描述

1.理解C++程序、Windows程序和MFC程序的联系与区别 C++是面向对象编程语言中的一种,它具有封装性、继承性以及多态性三大特性,用C++语言写出来的程序需要借助编译器才能生成可执行的二进制代码,VC++6.0中具有能识别C++程序的编译器,所以VC++6.0可以用来作为C++程序的开发环境。 MFC(Microsoft Foundation Class)是微软公司开发出来的一套用于Windows程序开发的类库,MFC是建立在C++语言基础之上的,它利用C++语言的三大特性对自己进行了封装,极大地方便了用户在Windows上进行程序开发,同时MFC也借助AppWizard使开发者摆脱离了那些每次都必写基本代码,借助ClassWizard和消息映射使开发者摆脱了定义消息处理时那种混乱和冗长的代码段。 Windows程序与其他程序最大的不同之处在于使用消息机制,在Windows程序中所发生的一切都可以用消息表示,消息用于告诉操作系统所发生的事情。在MFC中遵循Windows的消息机制,MFC对消息的处理利用了消息映射的方法,所谓消息映射就是将消息与处理函数相联系,即当系统产生一条消息时,它能找到处理该消息的函数,该方法的基础是宏定义实现。 2.Windows系统是一个消息驱动的OS,可以从以下几个方面来理解Windows的消息机制: ? 消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。

当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单选中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。

? 谁将收到消息:一个消息必须由一个窗口接收。在窗口的过程(WNDPROC)中可以对

消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选择进行处理那么你可以定义对WM_COMMAND进行处理的代码,如果希望在窗口中进行图形输出就必须对WM_PAINT进行处理。

38

C++面向对象程序设计实验指导书 实验十一

? 未处理的消息到那里去了:Windows系统为窗口编写了默认的窗口过程,这个窗口过程

将负责处理那些你不处理消息。正因为有了这个默认窗口过程我们才可以利用Windows的窗口进行开发而不必过多关注窗口各种消息的处理。例如窗口在被拖动时会有很多消息发送,而我们都可以不用处理,而是让系统自己去做默认处理。 ? 窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识

一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会被正确的处理。例如有两个窗口共用一个窗口过程代码,你在窗口一上按下鼠标时,消息就会通过窗口一的句柄被发送到窗口过程代码中。

? Windows系统的消息机制:系统将会维护一个或多个消息队列,所有产生的消息都回被

放入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统所以Windows可以同时进行多个任务。

3.本次实验将利用MFC的应用程序向导(AppWizard)生成一个支持MFC的Windows程序,同时在生成应用程序的过程中理解不同设置对工程的影响。

11.2.2 实验步骤

1.启动VC++6.0开发环境,选择File|New菜单项,弹出如图11-1对话框。

图11-1

2.选择MFC AppWizard[exe],在Location文本编辑框中输入文件欲保存的目录位置,或单击省略号“...”按钮选择已有的目录;同时在Project name下面的文本编辑框中输入工程名称,本次实验我们的工程名称为MyTestProject,这时OK按钮被激活。该对话框中还有以下选项:(如图11-1)

? Create new workspace单选按钮:表示创建一个新的工作区,并将新项目添加到这个工

39

C++面向对象程序设计实验指导书 实验十一

作区。

? Add current workspace单选按钮:表示将项目添加到当前工作区,如果此时有多个工作

区,那么可以通过选中Dependency of复选按钮来选择当前项目需要添加到的工作区。 2.单击OK按钮,进入如图11-2所示的MFC AppWizard - Step 1对话框,该对话框主要有以下选项:

? What type of application would you like to current?你想要创建的应用程序有以下单选项

供选择:

? Single document:生成单文档应用程序。 ? Multiple document:生成多文档应用程序。

? Dialog based:生成基于对话框的应用程序(如计算器等)。

? Document/View architecture support?是否需要支持文档/视图结构,需要则选中该选项,

如果不需要,则应用程序中关于文件的打开、关闭、保存及文档/视图的相互作用等功能需要程序员自己实现。

? What language would you like your resources in?选择生成何种语言界面的应用程序,如

果需要中文界面,则选择如图11-2中的“中文[中国]”,本例中选择生成单文档的应用程序。

图11-2

3.单击Next按钮进入MFC AppWizard – Step 2 of 6对话框,如图11-3所示,该对话框用于支持数据库功能选项的选择,本例中选择None,下面分别为该对话框中的主要选项做一个简单介绍:

? What database support would you like to include?有四个单选项供选择:

? None:不支持数据库。

? Header files only:只生成头文件。

40

C++面向对象程序设计实验指导书 实验十一

? Database view without file support:没有文件支持的数据库视图。 ? Database view with file support:具有文件支持的数据库视图。

? If you include a database view, you must select data source:若选择具有数据库视图,则必

须选择一个数据源。

? Data Source按钮,单击它,则打开如图11-4所示的Database Option对话框,用于进行

数据库的选择,主要有以下选项:

? Datasource:数据源区域,有以下单选项:

? ODBC:指定数据源是ODBC数据库。 ? DAO:指定数据源是DAO数据库。

? OLE DB:指定应用与OLE DB 数据源连接。 ? Recordset type:记录集类型区域,有以下单选项:

? Snapshot:指定记录集为快照。

? Dynaset:指定记录集为动态记录集。 ? Table:指定记录集为一个表。

? Advanced:高级选项,选中该选项可以指定m_bCheckCacheForDirtyFields为true,

为数据库创建一个数据缓冲区以检测数据。

图11-3

41

本文来源:https://www.bwwdw.com/article/p658.html

Top