C++面向对象程序设计实验指导书谭浩强.docx

上传人:b****6 文档编号:5592377 上传时间:2022-12-28 格式:DOCX 页数:51 大小:165.19KB
下载 相关 举报
C++面向对象程序设计实验指导书谭浩强.docx_第1页
第1页 / 共51页
C++面向对象程序设计实验指导书谭浩强.docx_第2页
第2页 / 共51页
C++面向对象程序设计实验指导书谭浩强.docx_第3页
第3页 / 共51页
C++面向对象程序设计实验指导书谭浩强.docx_第4页
第4页 / 共51页
C++面向对象程序设计实验指导书谭浩强.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

C++面向对象程序设计实验指导书谭浩强.docx

《C++面向对象程序设计实验指导书谭浩强.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计实验指导书谭浩强.docx(51页珍藏版)》请在冰豆网上搜索。

C++面向对象程序设计实验指导书谭浩强.docx

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

C++面向对象程序设计

实验指导书

江西理工大学电气工程与自动化学院

2015年9月

绪论1

0.1写本书的目的1

0.2本书的结构安排1

0.3如何使用本书2

实验一C++程序的运行环境和运行C++程序的方法3

1.1实验目的3

1.2实验内容和步骤3

实验二C++对C的扩充5

2.1实验目的5

2.2实验内容5

2.2.1程序阅读5

2.2.2程序设计7

2.3思考题7

实验三类和对象

(一)8

3.1实验目的8

3.2实验内容8

3.2.1程序阅读8

3.2.2程序设计10

4.3思考题10

实验四类和对象

(二)11

4.1实验目的11

4.2实验内容11

4.2.1程序阅读11

4.2.2程序设计12

4.3思考题13

实验五运算符重载14

5.1实验目的14

5.2实验内容14

5.2.1程序阅读14

5.2.2程序设计16

5.3思考题17

实验六派生与继承18

6.1实验目的18

6.2实验内容18

6.2.1程序阅读18

6.2.2程序设计20

实验七派生与继承—多重派生21

7.1实验目的21

7.2实验内容21

7.2.1程序阅读21

7.2.2程序设计24

7.3思考题24

实验八C++程序、Windows程序和MFC程序25

8.1实验目的25

8.2实验内容25

8.2.1实验描述25

8.2.2实验步骤26

8.2.3实验结果分析32

8.3思考题34

实验九简单单文档MFC程序设计35

9.1实验目的35

9.2实验内容35

9.2.1实验描述35

9.2.2实验步骤36

9.2.3实验结果41

9.3思考题42

实验十简单对话框程序设计43

10.1实验目的43

10.2实验内容43

10.2.1实验描述43

10.2.2实验步骤43

10.2.3实验结果50

10.3思考题50

实验十一简单数据库程序设计52

11.1实验目的52

11.2实验内容52

11.2.1实验描述52

11.2.2实验步骤53

11.2.3实验结果60

11.3思考题61

总结62

参考书目63

绪论

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++程序设计的同学提供一些练习题,从而提升这部分学生的程序设计能力;第三就是避免有些学生在做实验的过程中盲目按照指导书中的步骤一步一步地不加思考地写程序,学生要回答这些问题,就必须看懂这些程序中隐含的知识点,从而达到理论知识和实践知识更好地结合。

对于课堂练习,本书共安排了11个实验,共24个学时,实验安排如下:

实验一C++程序的运行环境和运行C++程序的方法(2学时)

实验二C++对C的扩充(2学时)

实验三类和对象

(一)(2学时)

实验四类和对象

(二)(2学时)

实验五实验五运算符重载(2学时)

实验六派生与继承(2学时)

实验七派生与继承—多重派生(2学时)

实验八实验八C++程序、Windows程序和MFC程序(2学时)

实验九简单单文档MFC程序设计(2学时)

实验十简单对话框程序设计(2学时)

实验十一简单数据库程序设计(4学时)

0.3如何使用本书

面向对象程序设计语言出现的目的就是为了设计大型的软件系统,但是教学过程中很难让学生在课堂上实现一个大型的(甚至是成型)的系统,所以作为教师应该引导学生在实现一个简单的功能性的程序的同时让学生思考,思考如何把这个地方的技术实现到一个复杂的应用系统中去;另外教师要充分利用本书中第二部分的练习,引导学生去思考如何利用C++的相关技术从头到尾设计一个具有实用价值的应用程序。

作为学生如果只是简单地按照本书中提供的步骤一步一步完成某一个程序,而不去思考为什么要这样做的话,那么学生能学到的知识也仅仅是C++的语法而已,并不能真正理解C++面向对象的思想,最终不能设计出好的程序来。

所以学生不仅要全部实现本书中的课堂练习,得出正确的结果,而且在完成了程序后还要思考本程序为什么要这样设计,如果换成其它的程序设计语言会怎么实现,只有这样才能够真正理解C++的精髓,从而掌握C++。

另外学生在学习最后四个实验的时候一定不要忘记前面C++语法知识,能否合理地将C++的三大特性运用到MFC的程序设计中是提高程序运行效率,存储效率和程序封装性一个最有效的手段。

实验一C++程序的运行环境和运行C++程序的方法

1.1实验目的

(1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。

(2)了解在该系统上如何编辑、编译、连接和运行一个C++程序e

(3)通过运行简单的C++程序,初步了解C++源程序的结构和特点。

应学会在一种以上的编译环境下运行C++程序,建议学习并掌握VisualC++6.0的使用方法。

1.2实验内容和步骤

(1)检查所用的计算机系统是否已安装了C++编译系统,并确定它所在的子目录。

(2)在VisualC++环境下编译和运行C++程序。

在第一次上机时,按以下步骤建立和运行C++程序:

①先进入VisualC++6.0环境。

②按照《上机指导》第9章介绍的方法,在自己指定的子目录建立一个名为test.cpp的新文件(此时尚未向文件输入内容)。

③从键盘输入以下程序(第l章第4题)

intmain();

{

inta,b;

c=a+b;

cout>>”a+b=”>>a+b;

}

④选择Build→Compiletest.cpp命令,对此源程序进行编译。

观察和分析编译信息。

⑤根据编译信息指出的错误,修改程序。

再进行编译,如果还有错,再重复此过

程,直到编译不出错为止。

⑥选择Build→Buildtest.exe命令,对程序进行连接,如果不出销,就会生成可执行程序test.exe。

⑦选择Build-Executetest.exe命令,执行可执行程序test.exe。

观察屏幕的变化。

在输出窗口应显示程序运行结果。

⑧分析结果是否正确,如果不正确或认为输出格式不理想,可以修改程序,然后重新执行以上④至⑧步骤。

此外,还可利用已有的源程序建立一个新程序。

由于刚才已建立了一个名为test.cpp的源程序,可以以它为基础建立一个新程序。

这样更方便些。

按以下步骤:

①通过“资源管理器”或“我的电脑”找到已有源程序test.cpp。

②双击"test.cpp"图标,进入VisualC++集成环境,打开test.cpp。

③在test.cpp基础上将源程序修改为以下内容(第l章第5题),

#include

usingnamespacestd;

intmain()

{

inta,b;

c=add(a,b)

cout<<”a+b=”<

return0;

}

intadd(intx,inty);

{

z=x+y;

return(z);

}

④选择File-Saveas命令,用新的文件名other.cpp保存。

此时,other.cpp与tesl.cpp在同一子目录下。

⑤对新文件other.cpp进行编译、连接和运行。

步骤同前。

(3)请思考以下问题,并上机进行试验。

将本实验中第2个程序作以下改动:

(a)将程序第1,2行改为下面一行

#include

(b)将第3行intmain()改为

voidmain()

(c)删去main函数中的

retum0;

再运行此程序。

并对此作分析,得到必要的结论。

(4)输入两个整数,将它们由大到小的顺序输出(本题是<

①使用指针方法。

②使用变量的引用。

比较这两种方法的特点和使用方法。

实验二C++对C的扩充

2.1实验目的

1.进一步了解和熟悉VC++6.0开发环境,学会在VC++6.0环境下调试程序;

2.熟悉C++中简单的标准输入输出函数的实用;

3.理解const修饰符的作用,并学会应用const修饰符;

4.理解内置(内联)函数的优缺点并学会使用内置函数;

5.理解和使用函数重载以及带默认参数的函数;

6.使用new和delete进行动态内存管理;

7.理解和使用引用。

2.2实验内容

2.2.1程序阅读

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

#include

usingnamespacestd;

intmax_def(intx,inty)

{

return(x>y?

x:

y);

}

intmax_def(intx,inty,intz)

{

inttemp=0;

return(temp=(x>y?

x:

y))>z?

temp:

z;

}

doublemax_def(doublex,doubley)

{

return(x>y?

x:

y);

}

intmain()

{

intx1=0;

intx2=0;

doubled1=0.0;

doubled2=0.0;

x1=max_def(5,6);

x2=max_def(2,3,4);

d1=max_def(2.1,5.6);

d2=max_def(12.3,3.4,7.8);-----------------------------------------------------①

cout<<"x1="<

cout<<"x2="<

cout<<"d1="<

cout<<"d2="<

return1;

}

问题一:

上述程序的输出结果是什么?

答:

问题二:

哪些情况可以参与函数的重载?

答:

问题三:

①处调用的是哪个函数?

答:

问题四:

②处的输出结果为什么是d2=12,而不是d2=12.3?

答:

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

#include

usingnamespacestd;

intmain()

{

int*p1=newint;-----------------------------------------------------①

int*p2=newint(0);-----------------------------------------------------②

char*p3=newchar[64];-----------------------------------------------------③

return1;

}

问题一:

①、②、③处动态申请内存分别代表什么不一样的意思?

答:

问题二:

该程序存在什么隐患?

改正该程序使隐患消除。

答:

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

#include

usingnamespacestd;

voidswap(inta,intb)

{

inttemp=a;

a=b;

b=temp;

}

voidswap(int*a,int*b)

{

inttemp=*a;

*a=*b;

*b=temp;

}

intmain()

{

inti=5;

intj=10;

cout<<"Beforeswap:

i="<

swap(i,j);-----------------------------------------------------①

cout<<"Afterthefirstswap:

i="<

swap(&i,&j);-----------------------------------------------------②

cout<<"Afterthesecondswap:

i="<

return1;

}

问题一:

上述程序的输出结果是什么?

答:

问题二:

①处函数调用后并不能实现两个数的交换,而②处却可以,为什么?

答:

问题三:

②处调用的是哪个重载函数?

答:

2.2.2程序设计

1.使用函数重载的方法定义两个重名函数,分别求出整形数平面间两点间距离和双精度平面间两点间距离,如果没有输入第二点的坐标则默认为圆点(0,0)。

2.设计一个函数:

exchange(floatx,floaty,floatz),当调用exchange(a,b,c)时,将a的内容赋值给b,b的内容赋值给c,c的内容赋值给a,要求采用引用的方式来实现。

2.3思考题

1.自己设计一个程序,测试const的三种用法:

指向常量的指针,常指针,指向常量的常指针。

2.编写一个函数,实现两个字符串变量的交换,要求参数用引用。

实验三类和对象

(一)

3.1实验目的

1.类的定义;

2.类对象的使用;

3.类成员变量的定义和使用;

4.类成员函数的定义和使用;

5.理解类的作用域;

6.理解类的声明;

7.理解类中private和public权限的声明依据。

3.2实验内容

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

#include

usingnamespacestd;

classCDate

{

voidSet(intm,intd,inty)

{

month=m;

day=d;

year=y;

}

intIsLeapYear()

{

return(year%4==0&&year%100!

=0)||(year%400==0);

}

public:

voidPrint()

{

cout<

}

private:

intmonth;intday;intyear;

};

voidmain()

{

CDatea;-----------------------------------------------------①

a.Set(10,15,2007);

a.Print();

}

问题一:

以上程序编译能通过吗,为什么,应该如何改正?

答:

问题二:

类CDate中分别有哪些成员函数和成员变量,它们分别属于哪种访问权限?

答:

问题三:

①处语句的意思是什么?

答:

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

#include

usingnamespacestd;

intmonth;//全局变量

intday;

intyear;

voidSet(intm,intd,inty)-----------------------------------------------------a

{

:

:

month=m;-----------------------------------------------------①

:

:

day=d;

:

:

year=y;

}

classCDate

{

public:

voidSet(intm,intd,inty)-----------------------------------------------------b

{

:

:

Set(m,d,y);-----------------------------------------------------②

}

voidPrint()

{

cout<

}

private:

intmonth;//成员变量

intday;

intyear;

};

voidmain()

{

CDatea;

a.Set(10,15,2007);

a.Print();

}

问题一:

①处是在给成员变量赋值,还是在给全局变量赋值,如果去掉域作用符:

:

,程序是否还能正确运行?

答:

问题二:

②处调用的哪个函数,如果去掉域作用符:

:

,程序是否还能正确运行?

答:

问题三:

该程序的输出结果是什么,试解释该输出结果。

答:

3.2.2程序设计

1.需要求3个长方柱的体积,请编一个基于对象的程序。

数据成员包括length(长)、width(宽)、height(高)。

要求用成员函数实现以下功能

①由键盘分别输入3个长方柱的长、宽、高:

②计算长方柱的体积:

③输出3个长方柱的体积。

编程序,上机调试并运行。

本题是<

4.3思考题

1.试设计一个复数类,该类有实部和虚部两个成员数据,成员数据采用私有访问权限,同时该类有两个共有成员函数,分别用来设置成员数据和输出成员数据,在主函数中分别采用对象方式,指针方式和引用方式来调用该类的公有函数设置和输出成员数据。

实验四类和对象

(二)

4.1实验目的

1.理解掌握this指针的作用和用法;

2.理解掌握构造函数的定义和作用;

3.掌握构造函数的使用;

4.理解掌握拷贝构造函数的定义和使用;

5.理解掌握构造函数的重载;

6.理解掌握析构函数的定义和使用。

4.2实验内容

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

#include

usingnamespacestd;

classCPoint

{

public:

voidSet(intx,inty);

voidPrint();

private:

intx;

inty;

};

voidCPoint:

:

Set(intx,inty)

{

x=x;

y=y;

}

voidCPoint:

:

Print()

{

cout<<"x="<

}

voidmain()

{

CPointpt;

pt.Set(10,20);

pt.Print();

}

问题一:

以上程序编译能通过吗,试解释该程序?

答:

问题二:

以上程序的运行结构是否正确,如果不正确,试分析为什么,应该如何改正?

答:

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

#include

usingnamespacestd;

classCPerson

{

public:

voidPrint();

private:

CPerson();

private:

intage;

char*name;

};

CPerson:

:

CPerson()

{

}

voidCPerson:

:

Print()

{

cout<<"name="<

}

voidmain()

{

CPersonps(23,"张三");

ps.Print();

}

问题一:

以上程序存在三处大错误,在不改变主函数内容的前提下,试改正该程序。

答:

4.2.2程序设计

1.设计实现一个CPoint类,满足以下要求:

a.该类包含两个整型成员变量x(横坐标)和y(纵坐标),以及一个输出函数Print()用来输出横坐标和纵坐标,要求不可以在类的外部直接访问成员变量;

b.可以采用没有参数的构造函数初始化对象,此时的成员变量采用默认值0;

c.可以采用直接输入参数的方式来初始化该类的成员变量;

d.可以采用其它的CPoint对象来初始化该类的成员变量;

e.设计一个主函数来测试以上功能。

4.3思考题

1.设计一个CStudent(学生)类,并使CStudent类具有以下特点:

a.该类具有学生姓名、学号、

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1