C++程序设计上机指导书Word文档下载推荐.docx
- 文档编号:19538621
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:10
- 大小:42.60KB
C++程序设计上机指导书Word文档下载推荐.docx
《C++程序设计上机指导书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++程序设计上机指导书Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
每组人数
上机学时
1
字符串类的设计与使用
设计
4
2
派生类的设计与使用
3
运算符重载
类模板设计和使用
三、上机实验环境
硬件:
CPUP3500Hz,内存256MB,硬盘500MB或以上
软件:
WindowsXPProfessional简体中文版,VisualC++6.0
四、参考书(3种以上)
1、《C++大学教程》,HarveyM.Deitel等著,邱仲潘等译,电子工业出版社2001
2、《C++编程思想》,BruceEckel著,刘宗田等译,机械工业出版社2002
3、《C++精粹》,IraPohl著,王树武等译,机械工业出版社2003
4、《数据结构》,严蔚敏编,清华大学出版社2004
实验1字符串类设计与使用
【实验目的】
1.熟悉C++语言程序的运行环境VisualC++;
2.了解在该集成环境下如何编辑、编译、连接和运行一个C++程序;
3.掌握C++中的面向对象设计的基本知识(类、对象、构造函数等);
4.通过字符串类的设计和使用,初步了解C++程序的基本结构。
【实验准备】
1.类的声明格式:
class类名
{
[private:
]
私有数据成员和成员函数;
public:
公有数据成员和成员函数;
};
2.构造函数和析构函数*
构造函数
析构函数
重载构造函数和拷贝构造函数
3.main函数
由一组相互通信的类对象组成
【实验内容】
1.编写字符串类CTString,设计样式如下:
classCTString
{
char*m_pData;
//用于保存字符数据
intm_nLen;
//记录字符长度
//构造函数和析构函数
CTString();
CTString(char*);
CTString(constCTString&
);
~CTString();
//其它成员函数
CTString*Copy(CTString*,CTString*);
//拷贝
CTString*Connect(CTString*,CTString*);
//连接
char*Find(CTString*,CTString*);
//查找子串
char*Find(CTString*,char);
//查找字符
voidPrint();
//打印输出字符串内容
……//学生自己扩充成员函数
};
要求学生实现上面成员函数的功能,有能力的同学可以自己扩充类的功能(成员函数)。
2.编写构造函数和析构函数
要求使用new和delete申请内存空间和释放空间,并注意内存泄漏的问题(空间申请不释放)。
3.类的测试
编写类功能测试用的主程序,并显示结果。
【思考题】
1.运行下面的程序,分析结果产生的原因。
#include<
iostream.h>
voidmain()
CTString*pstr;
pstr=newCTString;
pstr->
Print();
pstr->
Copy(“hello”);
}
2.
如何改写这个CTString类,使其能够有记录对象个数的功能?
实验2派生类的设计与使用
1.掌握派生类的设计方法;
2.了解继承的本质和好处;
3.熟悉继承过程中派生方法及访问性质的改变;
4.通过实验加深对C++中继承概念的理解。
1.派生类的声明格式:
class派生类名:
派生方式基类名
//派生类新特性(新增成员)
公有数据成员和成员函数;
2.派生类的构造函数和析构函数*
1)派生类两构函数的执行顺序
2)派生类两构函数的构造规则
3.调整派生类中的访问属性的其他方法
1)同名成员
2)访问声明
1.设计雇员类CEmpoyee,该类的格式如下:
classCEmpoyee
char*m_pName;
//姓名
intm_nAge;
//年龄
floatm_fSalary;
//薪水
CEmpoyee(char*pName=NULL,intage=0,floatsalary=0.0);
CEmpoyee(constCEmpoyee&
~CEmpoyee();
voidSetName(char*);
char*GetName();
voidSetAge(int);
intGetAge();
voidSetSalary(float);
floatGetSalary();
//打印输出信息
……//学生自己扩充其它成员函数
2.设计管理者类CManager,其的格式如下:
classCManager:
public(private)CEmployee
intm_nLevel;
//级别
CManager(char*pName=NULL,intage=0,floatsalary=0.0,);
float);
voidSetLevel(int);
intGetLevel();
3.编写主函数或者其它函数来测试CEmpoyee和CManager两类的性质和功能。
声明两个类的对象,观察两者的内存结构(有哪些数据成员?
各占多少字节?
)。
CManager定义时使用多种派生方式,然后用CManager对象使用其成员,观察private和public访问控制性质的变化。
1.每个类都有显式或隐式的构造函数和析构函数。
派生类中有一个隐含的基类对象,如何对这个对象进行初始化或销毁?
2.有两个类:
classX
inta,c;
public:
voidprint();
};
classY:
publicX
intb,c;
voidprint()
print();
//要使用从X那继承过来的print
}
Y类中的print函数能正常运行吗?
为什么?
实验3运算符重载
1.通过在复数类CComplex中对+,-,*,/,=,[]等运算符进行重载的设计,掌握运算符重载;
2.通过虚函数进一步了解C++多态的特性和作用。
1.多态性的概念
1)多态性的概念
2)多态性的实现
2.函数重载
1)普通函数重载
2)类的成员函数重载
3.运算符重载
1)运算符重载
2)一般运算符函数(友元)
3)成员运算符重载
4)调用方式
4.虚函数
1)虚函数的概念
2)虚函数的定义和使用
1.实现一个CComplexclass(数学里的复数),练习运算符的重载。
要求具有以下操作:
拷贝构造函数
operator=
operator*
operator+
operator-
operator/
operator==
operator[]
operator!
=
其中,复数类的实部和虚部的取值类型为float。
2.用一个简单的程序,使用CComplex的各个成员函数和运算符。
3.在CComplex中编写若干个虚函数,观察类对象有无虚函数内存结构的变化。
1.C语言为什么不支持函数重载,而C++却支持?
2.->
和()两个运算符如何实现重载?
3.C++实现虚函数的内存结构有什么好处?
实验4类模板设计和使用
1.掌握C++模板的设计方法;
2.了解模板的机制和好处;
3.同时复习数据结构中的知识。
1.函数模板的定义格式:
template<
classType…>
返回类型函数模板名(参数表)
使用Type的函数模板定义体
2.类模板的定义格式:
class类模板名
类模板的定义体
返回类型类模板名<
Type…>
:
函数模板名(参数表)
类模板中成员函数模板的定义体
1.设计数据结构中链栈的类模板(链表形式的栈)
template<
ClassT>
classLinkStack
//…
栈模板{}中的内容参照数据结构教材自己设计。
2.编写main函数等测试模板类。
3.有能力的同学可以选作一下附加题。
【附加题】
使用基类管理一个时钟的列表(可以使用标准模板库中STL中的vector)。
基类CTimer,他提供了基本的接口外,还提供了一个功能GetTimeZone,主要是取得时区,同时打印自己所在时区的字符串。
返回值可以是时区的代号。
这是一个虚函数,每个子类必须重载它。
子类继承于CTimer,比如CBeijingTimer.
每个Timer的对象有一个编号(可以是一个无符号的long或short),以方便在全局中区分每个Timer对象。
基类提供一个纯虚函数GetTimerID来取得Timer的编号。
用户界面可以随时创建一个Timer,并且可以根据TimerID随时删除一个Timer,可以以查询当前所有创建的Timer,可以查看指定TimerID的时区情况。
创建Timer时使用基类的指针保存子类对象的地址,使用STL的vector来保存。
定义一个数组类模版,然后以它为基类模板,如何定义一个派生类模板?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 上机 指导书