面向对象程序设计实验指导书厦门工学院电子信息工程系2013.8目录实验一:MicrosoftVisualStudio2008开发环境熟悉.................................3实验二:C++的类和对象............................................................6实验三:C++的派生类与继承........................................................9实验四:C++的多态性.............................................................12实验一:MicrosoftVisualStudio2008开发环境熟悉一、实验目的和要求1、熟悉MicrosoftVisualStudio2008开发环境;2、学会使用MicrosoftVisualStudio2008开发环境编辑、编译、链接和运行C++文件;3、初步了解C++源程序的基本结构,学会使用简单的输入输出操作;二、实验内容和步骤1、熟悉MicrosoftVisualStudio2008开发环境;(1)创建新项目:创建方法如图2.1所示:图2.1创建新项目(2)选择Win32控制台应用程序,如图2.2所示:图2.2选择VisualC++程序模板(3)在主cpp文件中编辑源程序,如图2.3所示:图2.3源程序编辑(4)进行C++文件的编译、链接和整个工程的运行;2、简单C++源程序的编写(1)输入以下程序,进行编译,如果有错误,则修改程序,直到没有错误为止,然后进行链接和运行,并分析运行结果;/*************************experiment1-2-1.cpp*******************************/#includestdafx.h#includeiostreamusingnamespacestd;intmain(){voidfun(int,int&);intx,y;fun(3,x);fun(4,y);cout”x+y=x+y”endl;return0;}voidfun(intm,int&n){n=m*5}/****************************************************************************/(2)编写C++编程风格程序experiment1-2-2.cpp:计算将100元人民币兑换成1、2、5元的人民币,有多少种换法?(3)编写C++编程风格程序experiment1-2-3.cpp:计算并输出两个整数、三个整数、两个双精度数、三个双精度数的最大值(使用函数重载);三、实验思考题1、列出experiment1-2-1.cpp中出现的错误,对实验结果进行分析,讨论在函数参数中传递变量、传递引用及传递指针有何区别?2、附录完整的源程序experiment1-2-2.cpp及其运行结果;要求源程序格式整齐,并对关键代码进行说明;3、附录完整的源程序experiment1-2-3.cpp及其运行结果。要求源程序格式整齐,并对关键代码进行说明;实验二:C++的类和对象一、实验目的和要求1、理解类和对象的概念,掌握声明类和定义对象的方法;2、掌握构造函数和析构函数的实现方法;3、掌握对象数组的使用以及使用对象、对象指针和对象引用作为函数参数的方法;4、掌握静态数据成员和静态成员函数的使用方法;二、实验内容和步骤1、输入以下程序,进行编译、连接和运行,并分析运行结果;/*************************experiment2-1.cpp*******************************/#includestdafx.h#includeiostream#includestring.husingnamespacestd;classCoordinate{public:Coordinate(intx1,inty1){x=x1;y=y1;}Coordinate(Coordinate&p);~Coordinate(){coutDestructoriscalled\n;for(inti=0;i200000000;i++);}intgetx(){returnx;}intgety(){returny;}private:intx;inty;};Coordinate::Coordinate(Coordinate&p){x=p.x;y=p.y;coutCopy-initializationConstructoriscalled!\n;}intmain(){Coordinatep1(3,4);coutp1.x=p1.getx()\tp1.y=p1.gety()\n;Coordinatep2(p1);coutp2.x=p2.getx()\tp2.y=p2.gety()\n;Coordinatep3=p2;coutp3.x=p3.getx()\tp3.y=p3.gety()\n;for(inti=0;i2000000000;i++);return0;}/****************************************************************************/2、编写C++风格源程序:已有若干学生的数据,包括学号、姓名、成绩,要求输出这些学生的数据并计算出学生的人数和平均成绩(要求将学生的人数和总成绩用静态数据成员表示)。[提示]程序的参考框架如下:/*************************experiment2-2.cpp*******************************/#includestdafx.h#includeiostream#includestring.husingnamespacestd;classStudent{private://普通数据成员定义://静态数据成员定义:学生数目、总分、平均分数public://声明构造函数//声明析构函数//普通成员函数//声明静态成员函数(可选)};//构造函数、析构函数、普通成员函数、静态成员函数(可选)函数体//静态数据成员初始化intmain(){//静态成员函数能在对象定义之前调用静态成员函数,以处理静态数据成员(可选)//定义相应的对象(3-4个);//数据输出for(inti=0;i2000000000;i++);return0;}/****************************************************************************/三、实验思考题1、写出并分析experiment2-1.cpp运行的结果;2、在experiment2-1.cpp中做如下修改:(1)将Coordinate类中带有两个参数的构造函数进行修改,在函数体内添加:cout”constructoriscalled.\n”,写出程序的运行结果,并解释输出结果。(2)在主函数体内添加语句:Coordinatep4;Coordinatep5(2);调试程序中会出现什么错误?为什么?如何进行适当的修改?3、附录完整的源程序experiment2-2.cpp及其运行结果;要求源程序格式整齐,并对关键代码进行说明。实验三:C++的派生类与继承一、实验目的和要求1、掌握派生类的声明方法和派生类构造函数的定义方法;2、掌握不同继承方式下,基类成员在派生类中的访问属性;3、掌握继承方式下、构造函数与析构函数的执行顺序与构造规则;4、学习虚基类在解决二义性问题中的作用;二、实验内容和步骤1、输入以下程序,进行编译、链接和运行,并分析运行结果;/*************************experiment3-1.cpp*******************************/#includestdafx.h#includeiostreamusingnamespacestd;classBase{public:voidsetx(inti){x=i;}intgetx(){returnx;}public:intx;};classDerived:publicBase{public:voidsety(inti){y=i;}intgety(){returny;}voidshow(){coutBase::x=xendl;}public:inty;};intmain(){Derivedbb;bb.setx(16);bb.sety(25);bb.show();coutBase::x=bb.xendl;coutDerived::y=bb.yendl;coutBase::x=bb.getx()endl;coutDerived::y=bb.gety()endl;for(inti=0;i2000000000;i++);return0;}/****************************************************************************/2、编写C++编程风格源程序:实现学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生了Student和教师类Teacher的基类。[提示]程序的参考框架如下:/*************************experiment3-2.cpp*******************************/classPerson{//定义基类的数据成员及成员函数};classStudent:publicPerson{//定义学生派生类的数据成员及成员函数}classTeacher:publicPerson{//定义教师派生类的数据成员及成员函数}intmain(){//相应对象创建及调用}/****************************************************************************/三、实验思考题1、写出并分析experiment3-1.cpp运行的结果;2、在experiment3-1.cpp中做如下修改:(1)将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?为什么?(2)将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误?为什么?(3)在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?为什么?(4)在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?3、附录完整的源程序experiment3-2.cpp及其运行结果,要求源程序格式整齐,并对关键代码进行说明。实验四:C++的多态性一、实验目的和要求1、了解多态性的概念;2、掌握运算符重载的基本方法;3、掌握虚函数的定义和使用方法;4、了解纯虚函数和抽象类的概念和用法;二、实验内容和步骤1、输入以下程序,进行编译、链接和运行,并分析运行结果;/*************************experiment4-1.cpp*******************************/#includestdafx.h#includeiostreamusingnamespacestd;classB{public:virtualvoidf1(doublex){coutB::f1(double)xe