《C++面向对象程序设计》实验教学大纲
课程名称:
| C++面向对象程序设计
|
课程编号:
| 408007
| 420006
| 436007
|
适用专业:
| 计算机科学与技术
| 网络工程
| 软件工程
|
总 学 分:
| 3
|
|
|
其中实验学时
| 30
|
|
|
一、实验课程性质、目的与任务
本课程是计算机各专业中的一门必修课程,主要内容包括:面向对象程序设计的方法和C++语言的基本概念。通过学习类的抽象性、封装性、继承性和多态性等概念及其运用,有助于学生开发出具有数据抽象程序高、体现信息隐藏、可复用、易修改、易扩充的模块化程序,逐步掌握C++面向对象的过程和面向对象的功能。为进一步学习后续课程和将来从事应用软件开发奠定良好的基础。
通过本实验课程的目的是使学生掌握有关C++语言的基本概念、基本语法和编程方法,理解C++语言面向对象的重要特征;促使学生理论联系实际,能够灵活运用自己所学的理论知识进行程序开发,增强学生的实践动手技能,并能够提高学生独立分析问题和解决问题的能力。
二、实验教学基本要求
C++面向对象程序设计实验是学习面向对象程序设计的重要实践环节,其目的是通过实验使学生掌握面向对象程序设计的基本原理,通过实验提高学生的程序设计能力和分析与解决实际问题的能力。
要求学生掌握C++面向对象程序设计的基本原理,并学会使用C++语言编写有关类的定义、创建对象,使用继承与多态性来编写程序。
上机实验要求:
1、准备好上机所需的程序;
2、上机输入和调试自己所编写的程序,并在程序设计在线测试平台上提交通过;
3、上机结束后,应整理出实验报告,实验报告应包括以下内容:实验项目名称;算法分析;程序清单;运行结果;对运行情况所作的分析以及本次调试程序所取得的经验,如果程序未能通过,应分析其原因。
三、实验项目与类型:
序号
| 实验项目
| 学时
| 实验性质
| 备注
|
验证
| 综合
| 设计
| 研究探索
| 必做
| 选做
|
1
| 函数
| 2
| √
|
|
|
| √
|
|
2
| 类的定义与建立对象
| 4
|
| √
|
|
| √
|
|
3
| 构造函数与析构函数
| 2
| √
|
|
|
|
| √
|
4
| 静态成员与对象成员
| 2
| √
|
|
|
|
| √
|
5
| 友元
| 4
|
|
| √
|
| √
|
|
6
| String类
| 2
| √
|
|
|
| √
|
|
7
| 继承与派生
| 4
|
|
| √
|
| √
|
|
8
| 虚函数与抽象类
| 2
| √
|
|
|
|
| √
|
9
| 运算符重载
| 4
|
| √
|
|
| √
|
|
10
| 流类库
| 2
| √
|
|
|
|
| √
|
11
| 异常处理
| 2
| √
|
|
|
|
| √
|
| 合计
| 30
| 7
| 2
| 2
|
| 6
| 5
|
四、实验教学内容
实验一:函数
1、实验目的
(1)掌握函数的声明与调用、函数重载、函数模版的方法
(2)熟悉函数实参与形参的对应关系、带默认值的函数
(3)能够编制并测试函数
2、方法原理
(1)函数重载:多个函数使用同一个函数名。
(2)函数实参与形参一一对应,缺省时使用默认值。
3、主要实验仪器及材料
计算机、安装C++(如VC++6.0或者DEV C++ )
4、实验内容
(1)编制一个函数并实现测试,判断输入年份是否为闰年,在主程序中实现输入输出。
(2)编程求下式的值: n1+n2+n3+n4+…+n10,其中,n=l,2,3。编写函数时,设置参数n的默认值为2。
(3)使用函数重载的方法定义两个重名函数,分别求两个整数和两个实数的最大值。
(4)使用函数重载的方法定义两个重名函数,分别求两个整数和三个整数的最大值。
实验二:类的定义与建立对象
1、实验目的
(1)理解面向对象程序设计的基本方法。
(2)掌握C++类的概念和类的定义方法,理解类和对象之间的关系。
(3)熟悉掌握成员函数的定义与调用。
2、方法原理
(1)类定义:客观世界中的事物往往需要从属性与行为两个方面进行描述,在C++中,分别用数据成员与函数成员来表现,并且将它们封装在一起,形成类。
(2)建立对象:使用类定义的变量。
3、主要实验仪器及材料
计算机、安装C++(如VC++6.0或者DEV C++ )
4、实验内容
(1)定义学生类student,类中包括数据成员和成员函数;建立对象并调用成员函数。
(2)下面是一个类的测试程序,编写能使用如下测试程序的类Test:
int main()
{ int a,b;
Test x;
while(cin>>a>>b)
{ x.intx(a,b);
x.printx();
}
return 0;
}
输入两个整数a和b,计算a-b。
实验三:构造函数与析构函数
1、实验目的
(1)熟悉掌握构造函数的定义与使用。
(2)熟悉掌握析构函数的定义与使用。
(3)掌握复制构造函数的定义与使用。
2、方法原理
(1)构造函数:构造函数具有特定名字——与类名相同;构造函数不能标以返回类型,它的返回值是隐含的;构造函数在机器执行对象声明语句时被自动调用,去初始化被声明的对象;构造函数允许按参数却省调用形式定义;构造函数名可以重载;当没有为一个类定义任何构造函数的情况下,C++编译器总要为它自动建立一个无参的构造函数。
(2)析构函数:对象撤销时被自动调用,释放构造函数分配的空间。函数名为~类名,不指定返回类型,不指定参数。
(3)复制构造函数:只有一个参数,使用所在类的对象的引用,用于一个对象初始化另一个对象。
3、主要实验仪器及材料
计算机、安装C++(如VC++6.0或者DEV C++ )
4、实验内容
(1)定义并测试一个类名为rectangle的矩形类,数据成员为矩形的长和宽,定义2个成员函数分别计算矩形的面积与周长,要求定义构造函数、析构函数和拷贝构造函数。
(2)定义学生类student,类中包含学生的基本信息:学号、姓名、性别、年级等数据成员,student类中有多个构造函数:带默认值的构造函数、带参数构造函数,以及显示学生信息、修改学生信息等成员函数。建立对象并调用相应的成员函数。
实验四:静态成员与对象成员
1、实验目的
(1)理解静态成员在数据共享中的作用,掌握静态成员的定义与使用方法。
(2)理解类的组合与对象成员的概念,掌握对象成员的使用方法。
(3)掌握组合类构造函数的定义与调用。
2、方法原理
(1)静态成员:静态成员使用关键字staic定义,它属于类而不属于某个对象,可以用类名来引用。
(2)子对象:使用另外一个类定义的对象作为数据成员。
3、主要实验仪器及材料
计算机、安装C++(如VC++6.0或者DEV C++ )
4、实验内容
(1)声明一个Cat类,拥有静态数据成员HowManyCats,用以记录Cat的个体数目;拥有静态成员函数GetHowMany(),用以存取HowManyCats。设计程序并测试这个类,体会静态数据成员好静态成员函数的用法。
(2)定义学生类student,类中包含学生的基本信息:学号、分数等。输入多个学生的学号与分数,使用类的静态成员计算所有学生的平均分。
实验五:友元
1、实验目的
(1)理解友元的概念。
(2)掌握友元的定义与使用。
2、方法原理
(1)友元:外部函数可以例外地访问类的任何私有成员。在类定义外定义,使用类对象引用作参数,可以访问对象的公开、私有成员。
(2)友元关系是单向的、不具有交换性、不具有传递性。
(3)三种友元形式:外部的函数作友元、另一个类的成员函数作友元和友元类。
3、主要实验仪器及材料
计算机、安装C++(如VC++6.0或者DEV C++ )
4、实验内容
(1)编写一个程序:输入几个学生的姓名、英语和计算机成绩,然后按照总分从高到低排序。要求定义一个student类,用友元函数实现排序。
(2)定义一个二维平面中的点(point)类,类中的数据成员为点的坐标,然后定义友元函数distance()用来计算两点之间的距离。
(3)定义一个时间类,包括私有成员时、分、秒,再定义一个友元函数,计算2个时间点相差的秒数。
实验六:String类
1、实验目的
(1)掌握一般字符串处理库函数的方法。
(2)理解String类的特点与作用。
(3)了解动态内存分配的特点,掌握new和delete运算符的基本用法。
2、方法原理
(1)定义字符串:声明字符串:string 字符串名; 声明字符串并且初始化:string 字符串名("字符串内容");
(2)字符串的成员函数:赋值函数assign()、长度函数length()、连接函数append()、比较函数compare()、求子串函数substr()、交换函数swap()、查找函数find()
3、主要实验仪器及材料
计算机、安装C++(如VC++6.0或者DEV C++ )
4、实验内容
(1)利用string类判断输入的字符串是否为回文。
(2)#include
#include
using namespace std;
void main( )
{
string s1("hello"),s2,s3,s4;
s2=s1;
s3.assign(s1);
cout< <"s1="<
char a[]="china",b[6];
s1=a;
cout< <"s1="<for (int i=0; i<5; i++)
b[i]=s2[i];
b[5]='\0';
cout<<" 字符数组"<
s4=s2+" "+s1;
s3=s2.append(s1);
cout< <"s2="<
else
cout< <"s3与s4比较的部分不相等";
string sz=s2.substr(5,5);
cout< <"子字符串sz="<s1.swap(s4);
cout<<" s1="<
int len=s1.length();
char *pt=new char[len+1];
s1.copy(pt,len,0);
pt[len]='\0';
cout<
s2=pt;
cout<
}
实验七:继承与派生
1、实验目的
(1)理解类层次的概念及实现类层次的方法,掌握派生的类别与方式。
(2)掌握派生类中如何使用基类的成员、基类成员在派生类中的访问控制。
(3)理解派生类中构造函数与析构函数的定义方法和执行顺序。
2、方法原理
(1)派生类的声明
class派生类名:派生方式基类名
{ private:
新增私有成员声明语句表列
public:
新增公开成员声明语句表列
};
(2)派生类的构造函数
派生类的构造函数要直接调用基类的构造函数。构造函数与释放函数是不能继承的,对派生类必须重新定义构造函数与释放函数。
3、主要实验仪器及材料
计算机、安装C++(如VC++6.0或者DEV C++ )
4、实验内容
(1)编写程序,声明一个哺乳动物Mammal类,再由此派生出Dog(狗)类。要求类中都必须有包含输出信息的构造函数与析构函数。声明一个Dog类的对象,运行程序,观察基类与派生类的构造函数与析构函数的调用顺序。
(2)定义point类,定义点类为基类,其数据成员x和y为私有成员。再定义圆类继承点类,该点为圆的圆心,新增数据成员圆的半径。在圆类中定义成员函数,其形式参数为一个点的对象,判断该点是在圆内部、圆外还是圆上。
实验八:虚基类与抽象类
1、实验目的
(1)了解基类和派生类的成员函数之间的虚函数关系。
(2)理解动态联编、静态联编、多态性、抽象类的概念。
(3)掌握如何使用基类指针、引用调用虚函数实现动态联编。
2、方法原理
(1) 虚函数的定义
virtual函数类型函数名(形参表)
{ 函数体 }
(2)纯虚函数的申明
virtual函数类型函数名(形参表)=0;
3、主要实验仪器及材料
计算机、安装C++(如VC++6.0或者DEV C++ )
4、实验内容
(1)编写程序声明一个Shape基类,再派生出矩形Rectangle和圆Circle类,二者都有GetArea()函数计算对象的面积。
(2)应用抽象类,求圆、圆内接正方形和圆外切正方形的面积和周长。
实验九:运算符重载
1、实验目的
(1)理解运算符重载的概念。
(2)熟练掌握运算符重载的方法,包括成员函数和友元函数重载。
2、方法原理
(1)重载规则:不可以重载非C++的运算符;可以采用成员函数方式或友元方式;
(2)成员函数方式
运算结果类型 operator 运算符(形式参数)
{ 函数体 }
(3)友元函数方式
friend 结果类型 operator 运算符(对象参数,参数)
{ 函数体 }
双目(返回类型类名∷operator双目运算符(类名&引用))
3、主要实验仪器及材料
计算机、安装C++(如VC++6.0或者DEV C++ )
4、实验内容
(1)定义日期类,重载“++”和“--”运算符,使之能处理两个日期类对象自增和自减运算,并且自增和自减又分为前缀和后缀运算。
(2)定义复数类,重载复数的加“+”和“*”运算符,完成复数的加法与乘法。
实验十:流类库
1、实验目的
(1)理解I/O流的概念、输入/输出流类的层次概念。
(2)熟练掌握格式化输入/输出、磁盘文件的输入/输出方法。
2、方法原理
(1)I/O流的概念:C++中把数据之间的传输操作称为流。使用流以后,程序用流统一对各种计算机设备和文件进行操作,使程序与设备、程序与文件无关。
(2)磁盘文件的输入与输出:对文件进行I/O操作时,要首先进行打开操作,使流与文件发生联系,建立联系后的文件才允许数据流入与流出。输入或者输出结束后,使用关闭操作使文件与流断开联系。
(3)输出流cout与输入流cin
输出流对象输出数据的语句格式为:
cout< <数据1<<数据2<<……<<数据n;
数据的输入通常采用cin流对象来完成,其格式为:
cin>>变量名1>>变量名2>>……>>变量名n; 入流cin
3、主要实验仪器及材料
计算机、安装C++(如VC++6.0或者DEV C++ )
4、实验内容
(1)编写程序,显示一个文本文件的内容。
(2)编写程序,分别采用一次复制一个字符和一次复制一行的方法,实现将一个文本文件复制到另一个文本文件中。
实验十一:异常处理
1、实验目的
(1)理解异常处理机制。
(2)掌握异常处理的使用方法。
(3)了解异常处理中的构造与析构函数。
2、方法原理
(1)throw语句:当程序发现了自己不能处理的异常,就可以使用throw语句将这个异常抛掷给调用者。
(2)try语句:将可能发生异常的程序段放在try语句中。
(3)catch语句:每个catch后的语句是异常处理程序,捕获由throw抛掷的异常。
3、主要实验仪器及材料
计算机、安装C++(如VC++6.0或者DEV C++ )
4、实验内容
(1)利用C++的异常处理,编写程序求一元二次方程的根,当方程无实数根时,输出“方程无实根”。
(2)采用C++异常处理的方法,编写程序防止数组下标越界。
五、考核方法
1.教师对学生实验过程完成情况进行详细登记,记入实验成绩中。
2.学生完成实验后按要求撰写实验报告,根据实验报告确定每次实验的等级。
3.实验成绩按20%比例计入课程期评总成绩中。
六、实验指导书及主要参考书目
[1] 自编C++实验指导书
[2] 瞿绍军 主编,C++程序设计教程习题答案和实验指导.华中科技大学出版社,2010
[3] 邓飞 主编,C++程序设计题解与实验指导.北京:中国人民大学出版社,2009
[4] 刘卫国 主编,C++程序设计实践教程.北京:中国铁道出版社,2008
[5] 李军民 主编,C++程序设计语言经典题解与实验指导.西安:西安电子科技大学出版社,2003
大纲撰写人:袁辉勇
大纲审阅人: 罗如为
教学副主任: 易叶青
2012.6