第一篇:《面向对象程序设计方法》实验教学大纲
《面向对象程序设计方法》实验教学大纲
(计算机科学与技术本科专业使用)
一、教学目标
通过该实验课,学生应在熟练掌握过程化程序设计方法的基础上,领会面向对象程序设计及类的封装、数据隐藏、继承及多态等特性,逐步掌握面向对象程序设计方法,培养一定的程序设计能力,为以后各专业课程的学习打下良好的程序设计基础。
二、实验教学时数
三、实验内容
实验一 图形打印
1、实验目的:练习for循环
2、实验技能培训内容:打印几种特殊图形,如菱形和Z字形
3、主要仪器:计算机
4、实验方法:上机编程
实验二 判素数
1、实验目的:练习函数
2、实验技能培训内容:判断101-200之间有多少个素数,并输出所有素数。
3、主要仪器:计算机
4、实验方法:上机编程
实验三 递归函数练习
1、实验目的:练习递归函数
2、实验技能培训内容:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 兔子的规律为数列1,1,2,3,5,8,13,21....3、主要仪器:计算机
4、实验方法:上机编程
实验四 数列排序
1、实验目的:练习数组及几种基本排序方法
2、实验技能培训内容:用选择、插入、冒泡、快速等几种基本的排序方法对数列进行排序。
3、主要仪器:计算机
4、实验方法:上机编程
实验五 矩阵乘积
1、实验目的:练习数组
20学时
2、实验技能培训内容:用数组存储两个矩阵,求两个矩阵的乘积。
3、主要仪器:计算机
4、实验方法:上机编程
实验六 设计时间日期类
1、实验目的:掌握简单类的设计方法
2、实验技能培训内容:构造一个TimeDate类,类中包含一个成员函数,用来在屏幕上显示时间与日期(采用建立在标准库time.h中的标准时间与日期来寻找与显示日期)。
3、主要仪器:计算机
4、实验方法:上机编程
实验七 设计计时类
1、实验目的:掌握简单类的设计方法
2、实验技能培训内容:建立Watch类,用来仿效秒表跟踪消逝的时间。用构造函数将消逝时间的初值置为零。提供两个成员函数Start()与Stop(),分别打开与关闭计时器。
3、主要仪器:计算机
4、实验方法:上机编程
实验八 设计字符栈类
1、实验目的:掌握简单类的设计方法
2、实验技能培训内容:用Stack类,写一个函数LoadStack(),用来返回已经将字母表(a-z)入栈的堆栈。在调用函数中,将这个堆栈赋值给另一个对象,并证明它包含字母表。可以改变堆栈的尺寸,以便它大得足以支持字母表。
3、主要仪器:计算机
4、实验方法:上机编程
实验九 友元的使用方法
1、实验目的:掌握友元的使用方法
2、实验技能培训内容:求两数的平方差(友元函数说明)
3、主要仪器:计算机
4、实验方法:上机编程
实验十 访问权限
1、实验目的:掌握类成员的各种访问权限
2、实验技能培训内容:类成员的各种访问权限
3、主要仪器:计算机
4、实验方法:上机编程
实验十一 类的派生
1、实验目的: 掌握类的派生
2、实验技能培训内容:给出基类AreaClass(形状类),建立两个派生类Box(方形类)与Isosceles(等腰三角形类),让每个派生类包含一个函数Area(),分别用来返回方形与等腰三角形的面积。
3、主要仪器:计算机
4、实验方法:上机编程
实验十二 用类方法求解一元二次方程
1、实验目的: 掌握类的派生
2、实验技能培训内容:实现一个Complex类和一个Real类。将Real类定义为Complex类的子类。然后设计一个求解一元二次实系数方程的根的类Root。
3、主要仪器:计算机
4、实验方法:上机编程
实验十三 类继承中的构造
1、实验目的: 掌握类继承中的构造
2、实验技能培训内容:类继承中的构造方法
3、主要仪器:计算机
4、实验方法:上机编程
实验十四 类继承中的构造
1、实验目的: 掌握类继承中的构造
2、实验技能培训内容:类继承中的构造方法
3、主要仪器:计算机
4、实验方法:上机编程
实验十五 大学生类
1、实验目的: 掌握虚函数的使用
2、实验技能培训内容:设计一个大学的类系统,包括Student(学生),Professor(教师),Staff(职员)。另有一个类既作为学生又兼作助教的可作为派生类StudentStaff,它是由Student类和Staff类派生而来,另外定义一个父类DataRec作为上述类(子类)的基类。
3、主要仪器:计算机
4、实验方法:上机编程
责任撰写人:陈桂芬
第二篇:面向对象程序设计实验教学大纲
《面向对象程序设计》
实验指导书
《面向对象程序设计实验》课程组
目录
实验预备 实验环境和工具使用,多文件应用程序的开发过程 实验一 类与对象
实验二 实验三 实验四 实验五 实验六 实验七 I/O实验八
构造函数、析构函数 继承-单继承 继承-多继承
多态-运算符重载
多态-虚函数 流与文件 模板
实验预备 实验环境和工具使用 多文件应用程序的开发过程
一、实验目的与要求
Visual C++提供了一个集源程序编辑、代码编译与调试于一体的开发环境,这个环境称为集成开发环境,对于集成开发环境的熟悉程度直接影响程序设计的效率,本实验通过学习Visual C++ 6.0界面的常用组成情况,并学习各种常用的窗口、菜单、按钮的意义和功能,并通过一些简单的程序设计,目的是使学生对用户界面、菜单和工具栏有一个全面的了解并掌握主要菜单命令。
了解Visual C++集成开发环境的界面组成; 理解菜单命令的含义 掌握“New:”菜单命令、“Breakpoints”菜单命令、“Build”菜单命令、“Source Brower”菜单命令、工具栏的定制和修改、联机帮助。 简单的程序设计
二、实验设备与平台
实验设备要求每个学生一台电脑,其中运行环境为VC++ 6.0系统。
三、实验内容及步骤 1.上机实验内容
Visual C++集成开发环境的用户界面识别; 新文件、新工程项目、工作区的创建; 设置、查看和删除断点; 编译和运行程序; 浏览资源信息;
工具栏的定制和修改; 联机帮助的使用;
熟悉Visual C++编写控制台模式程序的方法; 上机输入例题,调试并运行,并观察结果; 上机编写一个程序
实验1调试并编译程序。
在Visual C++下,编写控制台模式的程序和在DOS下编写程序相似,具有简单方便的特点,一般用于后台程序的编写。控制台模式下程序的编写有两种方法,一是创建一个C++源程序文件,二是创建一个控制台模式的工程。
⑴ 创建一个C++源程序文件
① 启动Visual C++,单击“File”菜单下的“New”菜单命令,出现“New”对话框。然后选择“Files”选项卡,在此选项卡的左侧,单击“C++ Source Files”:在选项卡的右侧,选择源程序存放的位置(location)以及源程序文件名(File),然后单击【OK】按钮。注意C++源程序文件的扩展名为.cpp。
② 在编辑区输入源程序,程序内容如下:
#include
(Build)按钮或者选择“Build”菜单命令,系统提示是否创建一个默认的工程工作区,单击【是】按钮即可。④ 系统开始编译源程序并链接相应的文件,如果没有错误则在集成开发环境下方的状态栏中出现下列提示“0error(s),0warning(s)”,此时可以按
① 启动Visual C++,单击“File”菜单下的“New”菜单命令,出现“New”对话框。然后选择“Projects”选项卡,在此选项卡的左侧,单击“Win32 Console Application”;在选项卡的右侧,选择工程文件存放的位置(location)以及工程文件名(Project Name)。然后单击【OK】按钮。
② 在“Win32 Console Application-Step 1 of 1”对话框中选择应用程序的类型“An empty project”,单击【Finish】按钮。③ 在集成开发环境的左侧单击“File View”属性页,右键单击“Source Files”,选择“Add Files to Folder„”。在“文件名”中填入文件名,此时也可以选择存在的文件。
④ 此时在“Source Files”左侧出现一个加号,单击加号,出现新的源程序文件“1_1.cpp”,双击此文件,在集成开发环境的右侧输入例1_1.⑤ 按照创建一个C++源程序文件的第④个步骤编译和运行程序。
图1-1 向工程中添加源程序文件
图1-2 选择添加的源程序文件的文件名与类型
实验一 类与对象
一、实验目的与要求
(1)掌握类和对象的概念、定义和使用方法。(2)掌握不同特性对象成员的访问方法
二、实验设备与平台
实验设备要求每个学生一台电脑,其中运行环境为VC++ 6.0系统。
三、实验内容及步骤
(1)定义一个描述学生类,数据成员包括:姓名、性别、年龄;成员函数包括:输出各个数据成员的值,设置各个数据成员的值。
(2)求点到直线的距离。定义一个点类Point,数据成员包括:坐标点。成员函数包括:设置各个数据成员的值的构造函数Point(), 取得坐标值的函数Getx(),Gety(),设计一直线类Line,数据成员包括:直线系数a,b,c;成员函数包括:取得系数的函数Geta(),Getb(),Getc();构造函数Line();
• 说明:
• d=|a*x0+b*y0+c|/sqrt(a*a+b*b)
实验二 构造函数与析构函数
一、实验目的与要求
1.掌握构造函数和析构函数的使用方法。2.掌握静态成员的使用方法。3.掌握友员的使用方法。
二、实验设备与平台
实验设备要求每个学生一台电脑,其中运行环境为VC++ 6.0系统。
三、实验内容及步骤
(1)写出下列程序的执行结果,然后上机进行验证。用VC6的Debug的功能跟踪构造函数、析构函数和成员函数的执行顺序。#include
x = 2;y = 50;z = 9;} TEST(int a,int b,int c){
cout << “调用重载构造函数”<< endl;
x = a;y = b;z = c;} void display(){
cout << “x=” << x << 't' << “y=” << y <<'t' << “z=” << z << endl;} int max(int a,int b){
if(a>b)return a;else return b;} ~TEST(){
cout << “调用析构函数” << endl;
cout << x << “,” << y <<“和” << z << “最大值是:” << max(max(x,y),z)<< endl;} private: int x,y,z;};
void main(){ TEST obj1;obj1.display();TEST obj2(33, 20, 80);obj2.display();}(3)静态成员练习:书例子 class tc {
(4)友元练习:书例子
实验三 继承-单继承
一、实验目的及要求
1、掌握继承、基类和派生类的概念。
2、掌握初始化基类成员的方法。
3、掌握派生类对基类的继承。
二、实验设备与平台
1、硬件环境:微型计算机,2、软件环境:Visual C++ 6.0;
三、实验内容及步骤
• 要求:设计点类、圆类和圆柱类,其中,圆类继承点类,圆柱类继承圆类。求:圆面积。圆柱表面积、体积。• 圆的面积:S=PI*R*R • 周长:C= 2*PI*R • 圆柱表面积:A=2*PI*R*H+2*PI*R*R • =C*H+2*S • 圆柱体积: V=PI*R*R*H =S*H
• class Point //点类 • { • protected: • double x,y;• public: • Point(double x0,double y0); double Area();
• };• class Circle:public Point { //圆类 • protected: • double r;//半径 • public: • Circle(double x0,double y0,double radius)• double Area()//计算圆的面积 •
• };• class Cylinder: public Circle { //圆柱体类 • double h;//高度 • public: • Cylinder(double x0=0,double y0=0,double height=0){ •
• double Area()//计算圆柱体的表面积 •
• double Volume()//计算圆柱体的体积 • } • };
思考:点,矩形,立方体?
radius=0, double
实验四 继承-多继承
一、实验目的及要求
1、掌握继承、基类和派生类的概念。
2、掌握初始化基类成员的方法。
4、掌握派生类对基类的继承。
二、实验设备与平台
1、硬件环境:微型计算机,2、软件环境:Visual C++ 6.0;
三、实验内容及步骤
1阅读程序,写出实验结果。
#include “stdafx.h” #include “iostream.h” class BASE1 {public: void show_i(){ cout<
j=y;} };int main(int argc, char* argv[]){ DERIVED obj;obj.set(5,7);obj.show_i();obj.show_j();return 0;} 2 书上作业。Student,worker,s_w.•
实验五 运算符重载
一、实验目的及要求
1、掌握用成员函数重载运算符的方法。
2、掌握用友元函数重载运算符的方法。
二、实验设备与平台
1、硬件环境:微型计算机,2、软件环境:Visual C++ 6.0;
三、实验内容及步骤
1、定义一个复数类,通过重载运算符:“ *”,“/”,直接实现二个复数之间的乘除运算。编写一个完整的程序,测试重载运算符的正确性。要求乘法“*”用友元函数实现重载,除法“/”用成员函数实现重载。
分析:两复数相乘的计算公式为:(a+b i)*(c+d i)=(ac-bd)+(ad+bc)i 两复数相除的计算公式为:(a+b i)/(c+d i)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d)i
2、定义一个分数类,通过重载运算符:“ *”,“/”,直接实现二个分数之间的乘除运算。编写一个完整的程序,测试重载运算符的正确性。要求乘法“*”用友元函数实现重载,除法“/”用成员函数实现重载。
实验六 多态性-虚函数
一、实验目的及要求
5、学习虚函数和纯虚函数的定义与使用方式。
6、理解抽象类的概念,学习如何用指针指向其他的派生类,实现多态性。
7、掌握抽象类的定义与使用方式,并注意指针的用法。
7、学习如何使用虚函数、纯虚函数、抽象类和实现类的多态性。
二、实验设备与平台
1、硬件环境:微型计算机,2、软件环境:Visual C++ 6.0;
三、实验内容及步骤
1、虚函数的简单使用。
# include
class subclass: public base { public: virtual void fn(){ cout « “In subclass n ”;} };
void test(base &b){ b.fn();} void main(){ base be;subclass sc;cout« “ Calling test(bc)n ”;test(bc);cout« “Calling test(sc)n ”;test(sc);}
2、定义一个从正方形、球体和圆柱体的各种运算中抽象出一个公共基 container类,在其中定义表面积和体积的纯虚函数,分析:
定义一个派生于container类的正方体类cube,在类中都具有求表面积的和体积的重定义的成员函数。定义一个派生于container类的球体类sphere,在类中都具有求表面积和体积的重定义的成员函数。
定义一个派生于container类的圆柱体类cylinder,在类中都具有求表面积和体积的重定义的成员函数。
实验八 模板
一、实验目的及要求
1.了解函数模板、类模板与模板函数、模板类的关系; 2.熟悉函数模板、类模板的声明与实例化过程; 3.掌握应用模板进行的程序设计
二、实验设备与平台
实验设备要求每个学生一台电脑,其中运行C程序环境为VC 6.0系统。
三、实验内容及步骤
模板的概念:
若一个程序的功能是对某种特定的数据类型进行处理,则将所处理的数据类型说明为参数,就可把这个程序改写为模板。模板可以让程序对任何其他数据类型进行同样方式的处理。
C++程序由类和函数组成,模板也分为函数模板(function template)和类模板(class template)。因此,可以使用一个带有多种不同数据类型的函数和类,而不必显式记忆针对不同的数据类型的各种具体版本。
函数模板的一般定义形式是: template <类型形式参数表> 返回类型 FunctionName(形式参数表){ //函数定义体 } 其中的类型形式参数表可以包含基本数据类型,也可以包含类类型。如果是类类型,则须在前面加上 calss。
这样的函数模板定义,不是一个实实在在的函数,编译系统不为其产生任何执行代码。该定义只是对函数的描述,表示它每次能单独处理在类型形式参数表中说明的数据类型。当编译系统发现有一个函数调用: FunctionName(实在参数表);将根据实在参数表中的类型,确认是否匹配函数模板中对应的形式参数表,然后生成一个重载函数。该重载函数的定义体与函数模板的函数定义体相同,而形式参数表的类型则以实在参数表的实际类型为依据。该重载函数称为模板函数(template function)。
注意:函数模板与模板函数的区别在于,函数模板是模板的定义,定义中用到通用类型参数。模板函数是实实在在的函数定义,它由编译系统在碰见具体的函数调用时所生成,具有程序代码。
实验1:用函数模板方法编写程序,对给各种不同类型的三个数分别求最大数。要求:编程序上机通过,写出运行结果。
实验2: 用函数模板方法编写程序,对给各种不同类型的两个数的和。
要求:编程序上机通过,写出运行结果。
实验七 I/O流与文件
一、实验目的与要求
(1)掌握流的概念。
(2)掌握文本文件和二进制文件的使用方法。
二、实验设备与平台
1、硬件环境:微型计算机,2、软件环境:Visual C++ 6.0;
三、实验内容与步骤:
(1)#include
cout< (3)建立一个文本文件“textfile.txt”(内容由读者选定),然后显示该文件,(4)建立若干个结构体类型的学生数据。要求 (1)键盘输入学生的信息,学生的属性包括学号、姓名和成绩,(2)用文件流中write函数将学生的信息写入文件D:student.dat(3)将student.dat中所有的数据读到内存中并显示输出在屏幕上。(10分)编写程序上机完成如下工作: Struct student { Int num;Char name[20];Float score;}stu[10];Main(){ //用键盘输入 For(int i=0;i<10;i++)Cin>>。。。。//写入文件中 Ifstream ifile(“d:student.dat”,ios::binary);//建立文件,并打开 if(!ifile.fail())//异常处理 { cerr<<“not open!” return 0;} For(int i=0;i<10;i++)Ifile.write(„„..);//写入 Ifile.close();//关闭 //读文件 Ofstream ofile(“d:student.dat”,ios::binary);For(int i=0;i<10;i++){Ofile.read(„..)//读出文件 Cout< 实验六 综合应用程序一 一、实验目的 本实验是对前面所学知识的总结,通过一个比较完整的应用程序的设计,将学过的知识连贯起来,掌握开发一个实际应用程序的步骤,同时学会使用开发工具实现界面友好的应用程序。并通过本实验,掌握如何运用面向对象技术对具体的应用系统进行分析和设计。 二、基本知识点 1、类和对象的定义、对象的初始化和使用 2、面向对象的继承机制 3、虚函数与多态性 4、运算符重载 5、文件的使用 6、算法的使用 三、基本要求 1、理解面向对象的特性 2、掌握面向对象程序设计的开发方法 3、有一定的分析问题和解决问题的能力 4、根据学过的知识点,充分利用已有的开发工具和素材,使程序编写具有更高的效率,能真正地解决实际问题。 四、实验内容: 可以在多个题目中选择一个: 1、编写一本通信录 2、模拟简单计算器 3、简单的管理系统的设计:如人事、工资、学生成绩等。(要求部分功能实现)。 五、学生实验报告要求 1、实验步骤 1)设计确定类的结构及各类之间的关系,注意成员变量和函数的性质(共有、私有或保护),哪些函数需要动态(定义为虚拟函数)。 2)创建系统项目(解决方案, Project)。 3)按上述结构定义各类,在构造函数中对成员变量进行初始化。4)定义各类中的成员函数 5)对用到的算法进行描述 2、完成编写相关实验代码 3、对实验结果进行分析 4、对本次实验要有总结 注意:要求在系统设计阶段对数据结构(主要是类的结构及类之间的联系)进行分析研究,充分利用面向对象的特性,使类结构尽可能合理和高效。 《面向对象程序设计实验》课程教学大纲 第六次实验: 友元的使用方式 1.学时:2课时; 2.实验类型:验证性实验 3.实验目的: (1)了解友元机制的由来和本质;(2)理解友元机制的主要作用; (3)掌握友元函数、友元成员和友元类的声明、定义和使用方法,并注意友元机制的安全风险问题。 4.实验内容: 实验题目1:友元函数的声明、定义和使用(1)程序功能简介 编程实现一个类的友元函数的声明、定义和使用代码。(2)程序设计要求 ① 采用声明和定义分开的方式实现一个类的友元函数; ② 通过调用友元函数,实现对一个类内所有访问权限的成员进行访问,验证友元机制。(3)程序设计说明 ① 参考教材例4.2(见P86)、例4.3(见P86)、例4.4(见P87)。(4)撰写实验报告 参考实验报告模板。 实验题目2:友元成员和友元类的声明、定义和使用(1)程序功能简介 编程实现一个类的友元成员和友元类的声明、定义和使用代码。(2)程序设计要求 ① 采用声明和定义分开的方式实现一个类的友元成员和友元类; ② 通过调用友元成员以及友元类的对象,实现对一个类内所有访问权限的成员进行访问,验证友元机制。(3)程序设计说明 ① 参考教材例4.5(见P91)、例4.6(见P92)、例4.7(见P93)。(4)撰写实验报告 参考实验报告模板。实验题目3:利用友元机制计算两点之间的距离(1)程序功能简介 设计一个点(Point)类,其中包括一对坐标数据成员、一个求两点之间距离的友元接口和显示坐标点的成员函数,并用数据进行测试。(2)程序设计要求 ① 首先,采用友元函数distance()的方式实现友元接口; ② 其次,采用友元成员distance()的方式实现友元接口; ③ 最后,尝试采用友元类的方式实现友元接口。(3)程序设计说明 ① 在头文件中声明类,在程序文件中定义类的成员函数; ② 采用构造函数进行对象的初始化; ③ 对于友元成员和友元类两种实现方式,可以另外定义一个求解两点距离的ComputeDistance类,将distance()作为该类的成员函数。(4)撰写实验报告 参考实验报告模板。 《面向对象程序设计》实验教学大纲 课程总学时:64 学分:4 实验学时:16 实验个数: 6个实验学分:1分 课程性质:专业必修课适用专业:计算机类专业 教材及参考书:《C++语言程序设计(第四版)》,郑莉、董渊编著,北京:清华大学出版社,2011 大纲执笔人:杨军 大纲审定人: 一、实验课的性质与任务 本课程实验大纲是面向计算机专业学生开设的《C++程序设计》实验课计划指导大纲,是依据《面向对象程序设计》课程教学计划指导大纲编制。本课程主要讲述了利用C++进行程序设计的思想和方法,既有面向过程和面向对象的程序设计的理论知识,又包括极强的实践应用能力的培养。本实验大纲力求结合该课程教学计划大纲的相应内容,由浅入深的指导学生了解和掌握如何利用C++程序设计语言进行程序设计,提高学生的动手能力,做到理论和实践相结合,培养学生理解,分析程序,编写,调试程序的能力,使之能把程序设计应用到今后的专业学习中。 二、实验目的与要求 1.实验目的 通过本课程的学习,使学生掌握面向过程的程序设计思想和编程思路,初步掌握面向对象的程序设计思想,学会调试程序,能独立编写实用的小型程序。2.实验要求 学生应该自始至终贯彻课程中所介绍的程序设计风格,养成良好的编程习惯; 应独立完成所布置习题。为保证尽量在统一安排的上机时间内编译运行通过程序,学生应事先设计好程序。 三、实验项目及内容提要 面向对象程序设计实验课程(071016) 序号 实验编号 实验名称 学时 必做 选做 学分数 实验类型 内容提要 基本操作 验证 综合设计 1 类与对象 √ √ 函数重载,类的设计与使用 2 2 C++程序的结构 √ √ 作用域与生存期,静态成员 3 数组、指针与字符串 √ √ 三种常见编程元素的使用 4 继承与派生 √ √ 派生类的设计与使用 5 多态性 √ √ 运算符重载、动态多态 6 模板和文件 √ √ 模板,异常处理机制的设计 四、实验内容安排: 实验一类与对象 (设计性实验 4学时)目的要求: 掌握类的定义和使用;掌握类对象的声明;练习具有不同访问属性的成员的访问方式;观察构造函数和析构函数的执行过程; 学习类组合使用方法; 使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。实验内容: 编写重载函数Max1可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。 写一个函数,具有一个引用作为形参参数,在函数中改变引用变量的值,观察实参变量的变化。 定义一个CPU类,包含等级(Rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU__Rank,定义为enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类,为以上的类编写构造和析构函数,观察组合类和内嵌类的构造函数和析构函数的调用顺序。 为题目2)的类编写复制构造函数,在主函数中利用复制构造的方式创建新的对象,观察对象的状态。 思考并回答以下概念:函数重载,引用,类,对象,数据成员,函数成员,访问属性,构造函数,析构函数,类的组合,内嵌对象,初始化列表,复制构造函数。主要仪器设备及软件:PC+Windows 2000+VC 6.0 实验二 C++程序的结构(设计性实验 2学时)目的要求: 观察程序运行中变量的作用域、生存期和可见性; 学习类的静态成员的使用; 学习多文件结构在C++程序中的使用。实验内容: 实现客户机(CLIENT)类。定义字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。 利用多文件结构实现题目1),在头文件client.h中定义类,在文件client.cpp中实现该类,在文件test.cpp 中测试这个类,观察相应的成员变量取值的变化情况,要求ClientNum能够实时记录客户机对象的数量。 思考并回答以下概念:类的静态数据成员,类的静态函数成员,多文件结构,文件包含。主要仪器设备及软件:Windows 2000+VC 6.0 实验三数组、指针与字符串实验(设计性实验 4学时)目的要求: 学习使用数组;学习字符串数据的组织和处理;学习标准C++库的使用; 掌握指针的使用方法;练习通过debug观察指针的内容及其所指的对象的内容;练习通过动态内存分配实现动态数组,并体会指针在其中的作用; 分别使用字符数组和标准C++库练习处理字符串的方法。实验内容: 编写一个类用于处理3×3矩阵转置,测试转置的效果,输出转置前后的矩阵。 定义一个具有构造函数和析构函数的类,如实验一的CPU类,定义一个CPU的对象数组,观察构造函数的析构函数的调用过程。利用动态内存分配的方式重新完成题目2)。 使用系统提供的string类定义字符串对象并初始化,实现从原始字符串中提取一个子串。选做:定义一个Point(二维点类)的对象数组,利用该数组实现直线的线性拟合。选做:定义一个动态数组类。 思考并回答:数组,指针,对象数组,动态内存分配,默认构造函数,标准类库,字符串类 string,线性拟合。 3.主要仪器设备及软件:Windows 2000+VC 6.0 实验四继承与派生 (设计性实验 2学时)目的要求: 学习定义和使用类的继承关系,定义派生类;熟悉不同继承方式下对基类成员的访问控制; 学习利用虚基类解决二义性问题。实验内容: 定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把 age改为公有成员变量,还会有问题吗?编程试试看。 定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,定义该派生类的对象,观察构造函数和析构函数的执行情况。 定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类,汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcycle)类有座位数(SeatNum)等属性。从bicycle和motorcycle派生出摩托车(Motorcar)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle 设置为虚基类,会有什么问?编程实验及分析原因。 思考并回答:继承,派生,子类对基类成员的访问权限,继承方式,继承时的构造函数和析构函数的调用顺序,虚基类 主要仪器设备及软件:PC+Windows 2000+VC 6.0 实验五多态和运算符重载(设计性实验 2学时)目的要求: 掌握运算符重载的方法;学习使用虚函数实现动态多态性。实验内容: 定义Point类,有坐标x,y两个私有成员变量;对Point类重载“+”(相加)、“-”(相减)和“==”(相等)运算符,实现对坐标的改变,要求用友元函数和成员函数两种方法实现。对Point类重载<<运算符,以使得代码 Point p;cout< 定义一个车(vehicle)基类,有虚函数Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,它们都有Run、Stop等成员函数。在主函数中用不同的方法调用Run、Stop成员函数,观察这些函数的执行结果,思考如何实现动态多态性,如果Run、Stop没有被定义为虚函数,执行结果会怎样,把结果和分析写入实验报告。选做,利用类完成求函数的积分(参考教材)。 思考并回答:多态,实现多态性的方法,虚函数,运算符重载,前++,后++,实现运算符重载的方式。 主要仪器设备及软件:PC+Windows 2000+VC 6.0 实验六模板和文件 (设计性实验 2学时)目的要求: 理解模板的作用和语法。 学习掌握C++文件处理类的基本用法。实验内容: 使用函数模板实现一个求3个数最大值的函数,并完成测试。 编写程序,用二进制方式打开指定的一个文件,在每一行前加行号。选做,练习使用STL中的vector模板类。选做,定义一个异常类CException,有成员函数Reason(),用来显示异常的类型。在子函数中触发异常,在主程序中处理异常,观察程序的执行过程。思考并回答:模板,函数模板,类模板,文件,文件读写,文件流类,文件操作方式,文件存储方式; STL,容器,异常处理。 3.主要仪器设备及软件:PC+Windows 2000+VC 6.0 五实验报告的格式(本部分要求各学院设计成表格作为教学大纲附件) 实验完毕,应用专门的实验报告本,根据预习和实验中的现象及数据记录等,及时而认真地写出实验报告。实验报告一般包括以下内容: 实验(序号)实验名称 (一)实验目的 (二)仪器工具及材料列出实验中所使用的主要仪器工具及材料。 (三)内容及程序应简明扼要地写出实验步骤流程。 (四)结果及分析应用文字、表格、图形等形式将数据表示出来。根据实验要求对数据进行分析和误差处理。 (五)问题讨论结合有关理论对实验中的现象、产生的误差等进行讨论和分析,以提高自己的分析问题、解决问题的能力,并提出应注意的事项,也为以后的科学研究打下一定的基础。 六、考核方式、方法及实验成绩评定方法 1、考核方式、方法: 面向对象程序设计实验课成绩占面向对象程序设计总成绩的15%,即共15分。考核方法为采用实验课随堂检查学生完成情况及现场提问让学生回答,根据学生完成情况及答辩情况给分次给出平时成绩,共5分。学生在完成实验后应将自己的实验过程,结果,经验写入实验报告并提交实验报告,实验报告成绩占10分,根据学生实验报告的书写质量及实验出勤情况打出。 2、实验成绩评定方法: 评定各级成绩时,可参考以下标准: (一)优秀(很好)14-15 能正确理解实验的目的要求,能独立、顺利而正确地完成各项实验操作,会分析和处理实验中遇到的问题,能掌握所学的各项实验技能,能较好地完成实验报告及其它各项实验作业,有一定创造精神和能力。有良好的实验工作作风和习惯。 (二)良好(较好)13-14 能理解实验的目的和要求,能认真而正确地完成各项实验操作,能分析和处理实验中遇到的一些问题。能掌握所学实验技能的绝大部分,对难点较大的操作完成有困难。能一般完成实验报告和其它实验作业。有较好的实验习惯和工作作风。 (三)中等(一般)11-12 能粗浅理解实验目的要求,能认真努力进行各项实验操作,但技巧较差。能分析和处理实验中一些较容易的问题,掌握实验技能的大部分。有30%掌握得不好。能一般完成各项实验作业和报告。处理问题缺乏条理。工作作风较好。能认真遵守各项规章制度。学习努力。 (四)及格(较差)8-9 只能机械地了解实验内容,能一般性地按实验步骤完成实验操作,能完成60%所学的实验技能,有些虽作但不准确。遇到问题常常缺乏解决的办法,在别人启发下能作些简单处理,但效果不理想。能一般完成实验报告,能认真遵守实验室各项规章制度,工作中有小的习惯性毛病(如工作无计划,处理问题缺乏条理)。 (五)不及格(很差)0-7 盲目地操作,只掌握50%的所学实验技能。有些实验虽能作,但一般效果不好,操作不正确。工作忙乱无条理。一般能遵守实验室规章制度,但常有小的错误。实验报告较多的时候有结果,遇到问题时说不明原因,在教师指导下也较难完成各项实验作业。或有些小聪明但不努力,不求上进。 七、实验主要应配套仪器设备及台(套)数(以一个实验教学班40人为标准)序号 仪器设备名称 数量 备注 计算机 40台 C++开发工具软件 1套 网络版 八、主要教材及参考书 《C++语言程序设计习题与实验指导》,郑莉、傅仕星编著,北京:清华大学出版社,2004 《面向对象程序设计方法》课程教学大纲 (计算机科学与技术本科专业使用) 一、课程的地位、教学目的和基本要求 C++语言是一种高效实用的程序设计语言,既可进行过程化的程序设计,也可进行面向对象程序设计。本课程以介绍C++语言的基本语法为基础逐步向学生渗透面向对象的程序设计思想,要求学生掌握类的封装、数据隐藏、继承及多态等特性,领会面向对象程序设计,掌握面向对象程序设计方法,培养一定的程序设计能力,为以后各专业课程的学习打下良好的程序设计基础。 二、主要教学环节 1、理论教学 学时数:60 占全部学时数:75 % 2、实验 学时数:20 占全部学时数:25 % 3、实训 学时数:二周 三、课程内容 Ⅰ.理论部分 第一章 C++入门 2学时(1)教学目的、要求 本章要求学生掌握源程序的编辑、编译、连接和执行。了解C++程序设计语言的发展过程以及支持环境。(2)重点与难点 本章的重点和难点是源程序的编辑、编译、连接和执行。 第一节 从C到C++ 第二节 程序与语言 第三节 结构化程序设计 第四节 面向对象程序设计 第五节 程序开发过程 第六节 函数 第二章 基本数据类型与输入输出 2学时(1)教学目的、要求 本章要求学生掌握C++语言数据类型,变量及常量的声明和赋值以及输入输出函数。了解I/O流及printf和scanf输入输出的作用。(2)重点与难点 本章的重点和难点是C++语言数据类型,变量及常量的声明和赋值以及输入输出函数。 第一节 字符集与保留字 第二节 基本数据类型 第三节 变量定义 第四节 常量及常量定义 第五节 I/O流控制 第六节 Printf与scanf 第三章 表达式和语句 2学时(1)教学目的、要求 本章要求学生掌握C++各运算符与常用表达式内容,及if语句的应用。(2)重点与难点 C++各运算符与常用表达式内容,及if语句的应用。 第一节 表达式 第二节 算术运算和赋值 第三节 算术类型转换 第四节 增量和减量 第五节 关系与逻辑运算 第六节 if语句 第七节 条件运算符 第八节 逗号表达式 第九节 求值次序与副作用 第四章 过程化语句 2学时(1)教学目的、要求 本章要求学生掌握switch,while, do…while, for结构的应用,了解描述算法和穷举、迭代算法。(2)重点与难点 本章的重点和难点是循环型程序设计,即switch,while, do…while, for 2 结构的应用。 第一节 while 语句 第二节 do…..while 语句 第三节 for语句 第四节 switch 语句 第五节 switch 语句 第六节 过程应用: 求兀 第七节 过程应用: 判明素数 第八节 过程应用: 求积分 第五章 函数 2学时(1)教学目的、要求 本章要求学生掌握函数的概念、定义、调用机制,和递归、内联、重载函数的概念,以及全局、局部变量。(2)重点与难点 本章的重点和难点是函数的概念、定义、调用机制,以及全局、局部变量。 第一节 函数概述 第二节 函数原型 第三节 全局变量和局部变量 第四节 函数调用机制 第五节 静态局部变量 第六节 递归函数 第七节 内联函数 第八节 重载函数 第九节 默认参数的函数 第六章 程序结构 2学时(1)教学目的、要求 本章要求学生掌握变量的存储类型,作用域,可见性,生命期等概念。(2)重点与难点 本章的重点和难点是变量的存储类型,作用域,可见性,生命期。 第一节 外部存储类型 第二节 静态存储类型 第三节 作用域 第四节 可见性 第五节 生命期 第六节 头文件 第七节 多文件结构 第八节 编译预处理 第七章 数组 2学时(1)教学目的、要求 本章要求学生掌握数组的概念、元素的访问,及数组的应用。(2)重点与难点 本章的重点和难点是数组元素的访问,及数组的应用。 第一节 数组定义 第二节 访问数组元素 第三节 初始化数组 第四节 向函数传递数组 第五节 二维数组 第六节 数组应用: 排序 第七节 数组应用: Josephus问题 第八节 数组应用: 矩阵乘法 第八章 指针 2学时(1)教学目的、要求 本章要求学生掌握指针的概念、运算,以及指针与数组和函数的应用。(2)重点与难点 本章的重点和难点是指针的运算,以及指针与数组和函数的关系及应用。 第一节 指针概念 第二节 指针运算 第三节 指针与数组 第四节 堆内存分配 第五节 const指针 第六节 指针与函数 第七节 字符指针 第八节 指针数组 第九节 命令行参数 第十节 函数指针 第九章 引用 2学时(1)教学目的、要求 本章要求学生掌握引用的概念、操作,以及引用作为函数参数的应用。(2)重点与难点 本章的重点和难点是引用的操作,以及引用作为函数参数的应用。 第一节 引用的概念 第二节 引用的操作 第三节 什么能被引用 第四节 用引用传递函数参数 第五节 返回多个值 第六节 用引用返回值 第七节 函数调用作为左值 第八节 用const限定引用 第九节 返回堆中变量的引用 第十章 结构 2学时(1)教学目的、要求 本章要求学生掌握结构体概念及其定义,结构体变量和结构体数组的引用,指向结构体变量和数组的指针。(2)重点与难点 本章的重点和难点是结构体数组的引用,指向结构体变量和数组的指针。 第一节 结构 第二节 结构与指针 第三节 结构与数组 第四节 传递结构参数 第五节 返回结构 第六节 链表结构 第七节 创建与遍历链表 第八节 删除链表结点 第九节 插入链表结点 第十节 结构应用: Josephus问题 第十一章 类 4学时(1)教学目的、要求 本章要求学生掌握类的概念、类的定义,及成员函数的调用。了解保护成员和软件方法的发展必然。(2)重点与难点 本章的重点和难点是类的概念、类的定义,及成员函数的调用。 第一节 从结构到类 第二节 软件方法的发展必然 第三节 定义成员函数 第四节 调用成员函数 第五节 保护成员 第六节 屏蔽类的内部实现 第七节 再论程序结构 第十二章 构造函数 6学时(1)教学目的、要求 本章要求学生掌握构造、析构函数的使用,以及构造类成员和构造对象的顺序。了解重载和默认构造函数的概念(2)重点与难点 本章的重点和难点是构造、析构函数的使用,以及构造类成员和构造对象的顺序。 第一节 类与对象 第二节 构造函数的需要性 第三节 构造函数的使用 第四节 析构函数 第五节 带参数的构造函数 第六节 重载构造函数 第七节 默认构造函数 第八节 类成员初始化困惑 第九节 构造类成员 第十节 构造对象的顺序 第十三章 面向对象程序设计 4学时(1)教学目的、要求 本章要求学生掌握结构化和面向对象方法的实现。了解程序效率和维护。(2)重点与难点 本章的重点和难点是结构化和面向对象方法的实现。 第一节 抽象 第二节 分类 第三节 设计和效率 第四节 讨论Josephus问题 第五节 结构化方法 第六节 结构化方法的实现 第七节 第八节 第九节 面向对象方法 面向对象方法实现 程序维护 第十四章 堆与拷贝构造函数 6学时(1)教学目的、要求 本章要求学生掌握堆的概念,堆对象,拷贝构造函数及浅拷贝与深拷贝的应用。了解临时和无名对象。(2)重点与难点 本章的重点和难点是堆的概念,堆对象,拷贝构造函数及浅拷贝与深拷贝的 7 应用。 第一节 关于堆 第二节 需要new和delete的原因 第三节 分配堆对象 第四节 拷贝构造函数 第五节 默认拷贝构造函数 第六节 浅拷贝与深拷贝 第七节 临时对象 第八节 无名对象 第九节 构造函数用于类型转换 第十五章 静态成员与友员 2学时(1)教学目的、要求 本章要求学生掌握懂得怎样声明一个静态数据成员,怎样使用静态成员函数以及静态成员函数为什么与特定对象无关。(2)重点与难点 本章的重点和难点是静态数据成员和静态成员函数的使用,以及友元的概念。 第一节 静态成员的需要性 第二节 静态成员的使用 第三节 静态数据成员 第四节 静态成员函数 第五节 需要友员的原因 第六节 友员的使用 第十六章 继承 8学时(1)教学目的、要求 本章要求学生掌握继承的概念,工作方式,以及多态性和虚函数的概念。了解抽象类和类的冗余。(2)重点与难点 本章的重点和难点是继承的概念,工作方式,以及多态性和虚函数的概念。 第一节 继承的概念 第二节 继承的工作方式 第三节 派生类的构造 第四节 继承与组合 第五节 多态性 第六节 多态的思考方式 第七节 多态性如何工作 第八节 不恰当的虚函数 第九节 虚函数的限制 第十节 类的冗余 第十一节 克服冗余带来的问题 第十二节 类的分解 第十三节 抽象类 第十四节 由抽象类派生具体类 第十五节 纯虚函数的需要性 第十七章 多重继承 6学时(1)教学目的、要求 本章要求学生掌握多继承的概念,工作方式以及多继承的构造顺序和访问控制。了解虚拟继承、保护和私有继承。(2)重点与难点 本章的重点和难点是多继承的概念,工作方式以及多继承的构造顺序和访问控制。 第一节 多继承如何工作 第二节 继承的模糊性 第三节 虚拟继承 第四节 多继承的构造顺序 第五节 继承的访问控制 第六节 保护继承与私有继承 第十八章 运算符重载 4学时(1)教学目的、要求 本章要求学生掌握运算符重载的需要性和应用。了解增量运算符的重载。(2)重点与难点 本章的重点和难点是运算符重载的需要性和应用。 第一节 运算符重载的需要性 第二节 如何重载运算符 第三节 值返回与引用返回 第四节 运算符作成员函数 第五节 重载增量运算符 第六节 转换运算符 第七节 赋值运算符 四、主要教科书和参考书 1、《C++程序设计教程》 2、《C++程序设计题解与上机指导》 3、《C++语言程序设计》 4、《C++语言与面向对象程序设计》 5、《C++语言程序设计》 钱能 钱能 潭浩强 郑莉 吕凤翥清华大学出版社 清华大学出版社 清华大学出版社 清华大学出版社 清华大学出版社 责任撰写人:陈桂芬第三篇:2017-教学大纲-《面向对象程序设计实验》
第四篇:《面向对象程序设计》(c++)实验教学大纲
第五篇:《面向对象程序设计方法》课程教学大纲