加入收藏 |  设为首页 |  写信给我    
首页 教学 □练习测试交流关于
 
相关联接

  实验指导

  课程教案
 
 □
教学大纲
 
 
实验指导
 

《面向对象程序设计》(Object-Oriented Programming)


实 验 指 导

实验一
熟悉C++编程环境(2学时)
一、实验目的
熟悉某种C++的编程环境

二、实验内容
1. 调通输出"Hello, world!"的C++程序。
2. 自行编写一个简单的程序进行调试运行。

三、实验步骤
以下是实验内容1的简单步骤:
1. 打开C++的编程环境;
2. 新建C++程序;
3. 熟悉编辑方法,编辑程序;
4. 编译、连接;
5. 运行,查看运行结果;
6. 如有错误,进行调试,重复第4、5步直至结果正确。

四、实验要求
1. 提交实验报告;
2. 相应的程序。
实验二
C++对C语言的常规扩充(1)(2学时)
一、实验目的
掌握C++语言中相对于C语言进行扩充的部分(1),体验C++与C语言在非面向对象方面的不同。

二、实验内容
1. 基本输入输出流。
2. 变量定义方法。
3. 作用域限定运算符::。
4. 枚举和结构类型。
5. const常量。
6. 函数形式的类型转换。

三、实验步骤
以下是实验内容1的简单步骤:
1. 编写一程序使用C++的标准输入流cin和标准输出流cout进行输入输出的程序;
2. 注意<<和>>运算符的使用及其方向性;
3. 观察有无#include <iostream.h>或#include <iostream>代码行时程序编译信息的变化;
4. 修改程序,体验在对不同类型变量进行输入输出运算时C++与C的不同。

四、实验要求
1. 提交实验报告;
2. 相应的程序。
实验三
C++中的对C语言的常规扩充(2)(2学时)
一、实验目的
掌握C++语言中相对于C语言进行扩充的部分(2),体验C++与C语言在非面向对象方面的不同。

二、实验内容
1. 引用。
2. inline函数。
3. 函数的缺省值。
4. 函数名重载。
5. new和delete。

三、实验步骤
以下是实验内容1的简单步骤:
1. 回顾C语言中swap程序的实现;
2. 编写采用引用方式传递参数的swap版本;
3. 逐行单步调试;
4. 注意观察两个不同版本swap函数在每一步执行时形式参数、实际参数值的变化。

四、实验要求
1. 提交实验报告;
2. 相应的程序。
实验四
类与对象(2学时)
一、实验目的
1. 掌握类的定义和使用方法。
2. 理解封装的基本含义和方法。

二、实验内容
1. 类的定义和实例化。
2. private和public可见性声明。
3. 构造函数和析构函数。
4. 成员函数和静态成员函数。
5. this指针。

三、实验步骤
以下是实验内容1的简单步骤:
1. 针对自己较熟悉的对象定义一个结构,如struct Student,并编写main函数对该结构进行测试;
2. 在struct结构中增加一些方法实现对其数据元素的操作,在main函数中对新添加的方法进行调用;
3. 将struct更改为class,注意观察更改前后程序编译信息的变化。

四、实验要求
1. 提交实验报告;
2. 相应的程序。
实验五
友元(2学时)
一、实验目的
1. 了解引入友元的目的
2. 学会友元函数和友元类的使用

二、实验内容
1. 定义一个date类,通过设计一个友元函数,求两日期之间的相差的天数。
2. 定义一个学生类和一个全体学生类,利用友元类的方法,实现对学生成绩排序。
3. 定义一个矩阵类和一个向量类,利用友元函数,实现矩阵和向量的乘法。(选做)

三、实验步骤
以下是实验内容1的简单步骤:
1. 按照实验内容,分析date类的属性和方法;
2. 将分析的结果,转化为程序的基本类;
3. 建立一个友元函数,函数形参为date类的两个对象,函数体为计算两个日期对象之间相差的天数程序;
4. 主函数中定义两个具体的日期对象,然后调用上述的友元函数,求出两个日期对象之间相差的天数。

四、实验要求
1. 提交实验报告
2. 相应的程序
实验六
重载(2学时)
一、实验目的
1. 理解重载基本概念
2. 掌握运算符重载基本方法

二、实验内容
1. 定义一个Time类,重载一元“++”和二元“+”操作符,使之具有时间相加的功能。
2. 定义一个Rectangle类,要求重载运算符“>” 或 “<” 使之实现比较两个矩形对象面积的大小。
3. 选编书中习题6.8。
4. 选编书中习题6.9。(选做)

三、实验步骤
以下是实验内容1的简单步骤:
1. 根据实验内容,确定Time类的属性和方法;
2. 将分析的结果转换为程序的基本类;
3. 主函数中定义Time类的具体两个对象,分别进行++和+操作。

四、实验要求
1. 提交实验报告;
2. 相应的程序。
实验七
继承(2学时)
一、 实验目的
1. 理解派生类与基类的关系
2. 理解派生类继承方式
3. 掌握单继承和多继承使用方法
4. 理解虚基类概念

二、 实验内容
1. 编一个使用派生类的程序,设计一个包含圆和圆柱的几何尺寸的类,它用内部数据建立几何形状并显示它们的尺寸、面积和体积
2. 设计一个圆类和桌子类,再设计一个圆桌类,它是从前两个类派生出来的。要求输出圆桌的高度、面积、颜色等数据。
3. 选编书中习题7.12。
4. 设计一个图书借阅管理系统。每本书有书号、书名和作者姓名属性,读者有借书证号、读者姓名和每位读者最多能够借阅的数量属性。(选做)

三、 实验步骤
以下是实验内容1的简单步骤:
1. 根据实验内容,确定基类和派生类,基类为圆,派生类为圆柱
2. 确定圆类和圆柱类的属性和方法
3. 将分析的结果分别转换为程序的基类和派生类
4. 主函数中定义圆柱的具体的对象,求出其面积和体积。

四、 实验要求
1. 提交实验报告;
2. 相应的程序。

实验八
运行时多态性(2学时)
一、 实验目的
1. 深刻理解滞后联编和早期联编的概念
2. 掌握虚函数的定义方法及其在实现多态性的作用
3. 理解纯虚函数和抽象类的使用意义

二、 实验内容
1. 选编书中习题8.13
2. 编写一个统计动物种类的程序,首先声明一个名为Animal的新类,再创建两个派生类Mammal和Bird。
3. 给定基类:
class Base
{
public: virtual void who_am_I(){cout<<”base\n”}
}
要求:
(1) 请从Base类派生两个新类,每个类定义who_am_I()来打印出自己类的名字;
(2) 主函数中分别创建这三个类的对象,用以调用who_am_I()函数
(3) 主函数中分别利用指向类Base的指针,调用who_am_I()函数

三、 实验步骤
以下是实验内容1的简单步骤:
1. 根据实验内容,正方体、圆柱体、球体三个类的公共类可为形状类;
2. 确定正方体、圆柱体、球体三个类的属性和方法;
3. 将分析的结果分别转换为程序的抽象类和派生类;
4. 定义二个函数,函数的形参是形状类的指针,分别求出某一形状的面积和体积;
5. 主函数中分别创建这三个类的对象,分别调用上述定义的两个函数,求出其面积和体积

四、 实验要求
1. 提交实验报告;
2. 相应的程序。

实验九
模板(2学时)

一、 实验目的
1. 正确理解模板的概念。
2. 学会利用模板的概念来编写函数、类。

二、 实验内容
1. 熟悉讲课中的例题。
2. 利用模板函数,编写一个比较数据大小的程序。
3. 利用模板函数,编写一个数据交换的程序。
4. 利用模板类,编写一个可显示任意类型的模板类。

三、 实验步骤
1. 定义一个模板函数,并在程序中使用模板函数;并体会模板的好处。
2. 定义一个简单的模板类,并在程序中使用模板类。

四、 实验要求
1. 提交实验报告
2. 相应的程序。


实验十
并发和并发程序设计(2学时)

一、 实验目的
正确理解并发与并发对象的概念。

二、 实验内容
1. 学习讲课中的多线程例题;并从中观察、体会在程序中如何进行多线程的控制。
2. 实现书中例10.7问题要求的设计,编写实际运行所需设计的程序。

三、 实验步骤
按照书例10.7中给出操作步骤。(试一试!)?

四、 实验要求
1. 提交实验报告
2. 相应的程序。


实验十一
I/O流库(2学时)
一、 实验目的
1.熟悉流类库中常用的类及其成员函数的用法。
2.学习标准输入输出及格式控制。
3.学习对文件的应用方法(二进制文件、文本文件)。

二、 实验内容
1. 观察以下程序的输出,注意对输出格式的控制方法;
//lab11_1.cpp
#include <fstream>
using namespace std;
#define D(a) T<<#a<<endl;a

ofstream T("Output.out");

int main()
{
D(int i=53;)
D(float f=4700113.141593;)
Char *s="Is there any more?";

D(T.setf(ios::unitbuf);)

D(T.setf(ios::showbase);)
D(T.setf(ios::uppercase);)
D(T.setf(ios::showpos);)
D(T<<i<<endl;)
D(T.setf(ios::hex ,ios::basefield);)
D(T<<i<<endl;)
D(T.unsetf(ios::uppercase);)
D(T.setf(ios::oct,ios::basefield);)
D(T<<i<<endl;)
D(T.unsetf(ios::showbase);)
D(T.setf(ios::dec,ios::basefield);)
D(T.setf(ios::left,ios::adjustfield);)
D(T.fill('0';)
D(T<<”fill char:”<<T.fill()<<endl;)
D(T.width(8);)
T<<i<<endl;
D(T.setf(ios::right,ios::adjustfield);)
D(T.width(8);)
T<<i<<endl;
D(T.setf(ios::internal,ios::adjustfield);)
D(T.width(8);)
T<<i<<endl;
D(T<<i<<endl;) //Without width(10)
D(T.unsetf(ios::showpos);)
D(T.setf(ios::showpoint);)
D(T<<”prec="<<T.precision()<<endl;)
D(T.setf(ios::scientific,ios::floatfield);)
D(T<<endl<<f<<endl;)
D(T.setf(ios::fixed,ios::floatfield);)
D(T<<f<<end1;)
D(T.setf(0,ios::floatfield);) //Automatic
D(T<<f<<endl;)
D(T.precision(16);)
D(T<<"prec="<<T.precision()<<endl;)
D(T<<endl<<f<<endl;)
D(T.setf(ios::scientific,ios::floatfield);)
D(T<<endl<<f<<endl;)
D(T.setf(ios::fixed,ios::floatfield);)
D(T<<f<<endl;)
D(T.setf(0,ios::floatfield);) //Automatic
D(T<<f<<endl;)
D(T.width(8);)
T<<s<<endl;
D(T.width(36);)
T<<s<<endl;
D(T.setf(ios::left,ios::adjustfield);)
D(T.width(36);)
T<<s<<endl;
D(T.unsetf(ios::showpoint);)
D(T.unsetf(ios::unitbuf);)
}
2. 编写程序,用二进制方式打开指定的一个文件,在每一行前加行号。
3. (选做)使用实验10中的学生类数组,输入数据并显示出来,使用I/O流把此数组的内容写人磁盘文件,再显示出文件内容。

三、 实验步骤
1. 观察题目中程序的输出,学习对输出格式的控制方法;尝试更改输出语句中的参数,以加深对输出格式的理解;
2. 编写程序lab11-2.cpp。使用int main(int argc,char * argv[])函数中的参数传递操作的文件名,定义ofstream的对象对文件进行操作,使用getline成员函数读入数据,使用cout输出字符到文件。

四、 实验要求
1. 提交实验报告;
2. 相应的程序。

实验十二
Visual C++开发环境介绍 (2学时)

一、 实验目的
简单了解Windows程序设计及Visual C++开发环境。

二、 实验内容
1. 练习使用VC++ AppWizard(应用程序向导)生成一个最简单的Windows应用程序。
2. 编写一个简单的程序,并编译、运行该程序。

三、 实验步骤
1. 创建一个项目
(1) 单击File菜单中的New选项,显示New(新建)对话框。
(2) 在Project(项目)选项卡中,选择MFC AppWizard(exe)。在Location(位置)文本框中指定一个路径,在Project Name(项目名称)文本框中为项目输入一个名字,单击OK。
2. 在出现的对话框中选择Multiple Document 、Document/View Architecture support、中文[中国],单击Next按钮。
3. 在选择提供项目所需要的数据库支持种类时,选择None,不使用数据库,单击Next按钮。
4. 设置程序的OLE和ActiveX支持类型,选择None ,单击Next按钮。
5. 在设置用户界面特征的对话框中,不做任何改变,单击Next按钮。
6. 设置使用MFC库的方式,接受缺省的选项。
7. 设置类和文件名,不做任何修改。
8. 单击Finish(完成)按钮后,AppWizard显示一个摘要表,其中列出了所选的项目特征。单击OK创建项目。

四、 实验要求
1. 提交实验报告;
2. 相应的程序。


 

 

上海应用技术学院 C++课程建设组制作 版权所有 2003年8月