《面向对象程序设计实验》课程教学大纲
第十次实验:
继承与派生
1.学时:2课时;
2.实验类型:设计性实验
3.实验目的
(1)掌握多继承和派生类的方法;
(2)掌握初始化基类成员的方法;
(3)掌握定义虚基类的方法。
4.实验内容与步骤
实验一:
(1)程序功能简介
定义一个日期(年、月、日)的类和一个时间(时、分、秒)的类,并由这两个类派生出日期和时间类。主函数完成基类和派生类的测试工作。
(2)程序设计说明
① 定义一个描述日期的类,构造函数完成年、月、日的初始化,包含一个重新设置日期的成员函数,一个获取日期的成员函数。该类可定义为:
class Date{
int Year,Month,Day; //分别存放年、月、日
public:
Date(int y=0, int m=0,int d=0)
{
Year= y; Month = m; Day = d;
}
void SetDate(int ,int ,int );
void GetDate(char *);
};
② 函数SetDate完成数据成员的赋初值。函数GetDate要将整数年、月、日变换成字符串后,存放到参数所指向的字符串中。把一个整数变换成字符串可通过库函数:
char * _itoa(int a , char *s, int b);
来实现,参数a为要变换的整数,b为数制的基数(如10,表示将a转换为对应的十进制的字符串),转换的结果存放到s所指向的字符串中。函数返回变换后字符串的首指针。该成员函数可以是:
void Date::GetDate(char *s)
{
char t[20];
_itoa(Year,s,10);
strcat(s,"/");
strcat(s,t);
trcat(s,"/");
_itoa(Day,t,10);
strcat(s,t);
}
③ 定义描述时间的类与描述日期的类类同,然后用这二个类作为基类,公有派生出描述日期和时间的类。
(3)程序设计要求
将类DateTime改为由基类Date和Time私有派生,程序能否正确编译和执行,为什么?
(4)撰写实验报告
参考实验报告模板。
2.上机实验题二
(1)程序功能简介
设计一个描述儿童、成人和老人的类,儿童分为学龄前和学龄期儿童,成人有工作,老人已退休。提取共性作为基类,并派生出满足要求的各个类及每一个类上的操作。设计一个完整的程序,并完成测试程序的正确性。
(2)程序设计说明
描述一个人的基本特性包括:姓名,出生日期,出生地。把这些基本特性定义为一个基类Base。不论学龄前还是学龄期儿童都要有监护人。为此在类Base的基础上派生出类AllChil,再把类AllChil作为基 //将年、月、日拼接成一个字符串 //将年变换为字符串表示 //年、月、日之间用“/”隔开 //将月变换为字符串表示 //将年、月字符串拼接 _itoa(Month,t,10);
类派出学龄前和学龄期儿童的类。把类Base作为基类,分别派生出成人类和老人类。
(3)程序设计要求
完成程序的正确性测试工作。
(4)撰写实验报告
参考实验报告模板。
实验三:项目选做
设计程序从学生类中派生出硕士研究生和博士研究生类。
第十二次实验:
多态与重载
1.学时:2课时;
2.实验类型:设计性实验
3.实验目的
(1)理解C++类多态性的本质;
(2)掌握运算符重载的实现方法;
(3)积累复杂程序设计、编写、调试和测试的经验。
4.实验内容与步骤
实验一:时间和日期
(1)程序功能简介
定义一个日期(年、月、日)的类和一个时间(时、分、秒)的类,并由这两个类派生出日期时间类;可以设置时间和日期并得到是星期几,可以比较日期、时间的大小,可以进行两个日期(或天数)、时间(小时或分钟)的相加和相减;主函数完成基类和派生类的测试工作。
(2)程序设计要求
① 在日期类CDate中添加成员函数重载运算符+,如得到新日期,应考虑闰年处理;
② 在日期类CDate中添加成员函数重载运算符-,如得到新日期,应考虑闰年处理;
③ 在时间类CTime中添加成员函数重载运算符+,应考虑时间对象加上分钟后可能得到新日期;
④ 在时间类CTime中添加成员函数重载运算符-,应考虑时间对象加上分钟后可能得到新日期;
⑤ 时间类和日期类的多种格式输入和输出,比如12、24小时制等;
⑥ 测试所有类的成员函数、时间类和日期类的初始化、具体值的设置、比较大小等功能。
(3)程序设计说明
① 定义一个描述日期的类,构造函数完成年、月、日的初始化,包含重新设置日期、获取日期、比较日期大小和进行日期加减的成员函数。该类定义形式可以参考:
class CDate{
int Year,Month,Day; //分别存放年、月、日
static int format; //用于确定采用哪种格式显示日期
enum WeekName{Monday, Tuesday, Wensday, Thursday, Friday,
Saturday, Sunday};
enum{January, February, Mars, April, May, June, July, August,
September, October, November, December};
public:
CDate();
CDate(const CDate & d);
CDate(int y=0, int m=0,int d=0)
{
Year= y; Month = m; Day = d;
}
//void SetDate(int ,int ,int );
//void GetDate(char *);
inline void SetYear(int y);
inline void SetMonth(int m);
inline void SetDay(int d);
inline void GetYear(int y);
inline void GetMonth(int m);
inline void GetDay(int d);
void ShowDate();
char* GetWeekNameofDate(const CDate & d);
char* GetMonthNameofDate(const CDate & d);
bool IsLeapYear(int year);
bool operator <(const CDate & d) const;
bool operator <=(const CDate & d) const;
bool operator >(const CDate & d) const;
bool operator >=(const CDate & d) const;
bool operator ==(const CDate & d) const;
bool operator !=(const CDate & d) const;
const CDate operator +(const CDate & d);
const CDate operator -(const CDate & d);
void operator ++();
void operator --();
friend ostream& operator <<(ostream& out, const CDate & d); friend istream& operator >>(istream& in, const CDate & d);
};
② 定义一个描述时间的类,构造函数完成小时、分钟的初始化,包含重新设置时间、获取时间、比较时间大小和进行时间加减的成员函数。该类定义形式可以参考:
class CTime{
int Hour,Minute,Second; //分别存放时、分、秒
static int format //用于确定采用哪种制式显示时间 public:
CTime();
CTime (const CDate & d);
CTime (int h=0, int m=0,int s=0)
{
Hour=h; Minute=m; Second=s;
}
//void SetTime(int ,int ,int );
//void GetTime(char *);
inline void SetHour(int h);
inline void SetMinute(int m);
inline void SetSecond(int s);
inline void GetHour(int h);
inline void GetMinute(int m);
inline void GetSecond(int s);
void ShowTime();
bool operator <(const CTime & t) const;
bool operator <=(const CTime & t) const;
bool operator >(const CTime & t) const;
bool operator >=(const CTime & t) const;
bool operator ==(const CTime & t) const;
bool operator !=(const CTime & t) const;
const CTime operator +(const CTime & t);
const CTime operator -(const CTime & t);
void operator ++();
void operator --();
friend ostream& operator <<(ostream& out, const CTime & t); friend istream& operator >>(istream& in, const CTime & t);
};
③ 观察上述两个类的设计结构,对于一些相同的功能函数,能否利用第三个类实现两个类共同功能代码的复用,即设计一个管理类CManager,将CDate和CTime两个类的相关代码提取到CManager类中。
(4)撰写实验报告
参考实验报告模板。
课程编号:052106
课程名称(中文):C++面向对象程序设计
课程名称(英文):C++ Object Oriented Programming
适用专业:计算机科学与技术、网络工程、软件工程
课程属性:学科基础课
课程性质:非独立设课
课程学时:20
课程学分:3.5
先修课程:C语言程序设计
实验目的和教学要求
1)了解Visual Studio.NET 2003或Visual C++ 6.0的特点;
2)熟悉Visual Studio.NET 2003或Visual C++ 6.0的开发环境;
3)学习用Visual Studio.NET 2003或Visual C++ 6.0编写标准的C++控制台程序。
实验目的和教学要求
1)学会编写简单的C++程序;
2)复习基本数据类型变量和常量的应用;
3)复习运算符与表达式的应用;
4)复习结构化程序设计基本控制结构的运用;
5)复习自定义数据类型的应用;
6)练习使用简单的输入输出;
7)观察头文件的作用;
8)学会使用Visual Studio.NET 2003或Visual C++ 6.0开发环境中的Debug调试功能;单步执行、设置断点、观察变量值。
实验目的和教学要求
1)掌握函数的说明、定义和调用方法;
2)练习重载函数的使用;
3)练习使用系统函数;
4)学习使用Visual Studio.NET 2003或Visual C++ 6.0的Debug调试功能,使用Step Into追踪到函数内部。
实验目的和教学要求
1)掌握类的声明和使用;
2)掌握类的声明和对象的声明;
3)复习具有不同访问属性的成员的访问方式;
4)观察构造函数析构函数的执行过程;
5)学习类的组合使用方法;
6)使用Visual Studio.NET 2003或Visual C++ 6.0的Debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。
实验目的和教学要求
1)观察程序运行中变量的作用域、生存期和可见性;
2)学习类的静态成员的使用;
3)学习多文件结构在C++程序中的使用。
实验目的和教学要求
1)学习使用数组数据对象;
2)学习字符串数据的组织和处理;
3)学习标准C++库的使用;
4)掌握指针的使用方法;
5)练习通过Debug观察指针的内容及其所指的对象的内容;
6)练习通过动态内存分配实现动态数组,并体会指针在其中的作用;
7)分别使用字符数组和标准C++库练习处理字符串的方法。
实验目的和教学要求
1)学习声明和使用类的继承关系,声明派生类;
2)熟悉不同继承方式下对基类成员的访问控制;
3)学习虚函数解决二义性问题。
实验目的和教学要求
1)掌握运算符重载的方法;
2)学习使用虚函数实现动态多态性。
实验目的和教学要求
1)了解结点类的声明与实现,学习其使用方法;
2)了解链表类的声明与实现,学习其使用方法;
3)了解栈类的声明与实现,学习其使用方法;
4)了解队列类的声明与实现,学习其使用方法;
5)掌握对数组元素排序的方法;
6)掌握对数组元素查找的方法。
实验目的和教学要求
1)了解C++标准模板库STL的容器类的使用方法;
2)应用标准C++模板库(STL)通用算法和函数对象实现查找与排序。
实验目的和教学要求
1)熟悉流类库中常用的类及其成员函数的用法;
2)学习标准输入输出及格式控制;
3)学习对文件的应用方法(二进制文件、文本文件)。
实验目的和教学要求
1)正确理解C++的异常处理机制;
2)学习异常处理的声明和执行过程。
实验目的和教学要求
简单了解Windows程序设计。
微型计算机、Turbo C++ 3.0或 Borland C++ 3.1 或 Microsoft Visual C++ 6.0或Visual Studio.NET 2003。
方式:上机;
要求:学生上机前应初步编好程序,在上机时进行调试,实验完成后提交实验报告。
实验部分不单独考试,但在课程考核的笔试中实验内容应占考试内容的10-20%,平时实验成绩占课程总评的10-20%。
本课程计划学时数为64学时,其中理论课44学时,实验课20学时。
实验教学学时分配表
实验教材:
1、郑莉 等,《C++语言程序设计(第3版)学生用书》,清华大学出版社
2、郑莉 等,《C++语言程序设计习题与实验指导》(含光盘),清华大学出版社
制订:肖锦辉
审核:薛晓萍
批准:麦 山
20##年 8 月 28 日
福建农林大学计算机与信息学院课程名称课题名称姓名学号专业年级指导教师职称计算机类课程设计报告面向对象程序设计课程设计猜数字游戏计算…
面向对象程序设计课程设计报告题目门禁系统的设计与实现系(院)计算机科学技术系专业软件技术班级20##级3班学生姓名学号指导教师二〇…
面向对象程序设计课程设计报告题目职工信息管理小型公司工资管理系统院系专业班级学号学生姓名小组成员20xx年9月6日一引言本题对程序…
C面向对象程序设计课程设计报告题目分数计算器设置班级专业计算机科学与技术学号K031241521姓名周林指导教师小组成员周林张齐满…
面向对象程序设计程序设计报告课程设计2020学年第学期设计题目职工工资管理系统设计院系计算机科学与信息工程学院专业班级学号学生姓名…
安徽广播电视大学梁伍七一、引言中期评估之前,我校加强网络教学的同时,逐步形成了“面授辅导+网络教学+小组学习”的课程教学模式实践模…
课程实验报告课程名称面向对象程序设计实验名称面向过程的整型栈编程院系计算机科学与技术专业班级学号姓名指导教师年日面向对象程序设计实…
Java面向对象程序设计第1版Java面向对象程序设计课程实验一报告学号姓名专业学校1Java面向对象程序设计第1版11实验目标查…
C面向对象程序设计课程设计报告题目分数计算器设置班级专业计算机科学与技术学号K031241521姓名周林指导教师小组成员周林张齐满…
面向对象程序设计课程设计报告题目门禁系统的设计与实现系(院)计算机科学技术系专业软件技术班级20##级3班学生姓名学号指导教师二〇…
西北农林科技大学信息工程学院面向对象程序设计实习报告题目:简易计算器的设计与实现目录一、综合训练目的与要求............…