c++实验五实验报告.docx
- 文档编号:16066292
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:16
- 大小:38.09KB
c++实验五实验报告.docx
《c++实验五实验报告.docx》由会员分享,可在线阅读,更多相关《c++实验五实验报告.docx(16页珍藏版)》请在冰点文库上搜索。
c++实验五实验报告
实验五实验报告
1.实验目的及要求
(1)掌握虚函数定义及实现。
(2)掌握具有多态性的面向对象程序设计的基本方法。
(3)掌握纯虚函数与抽象类的定义、实现及应用。
2.实验设备
计算机、MicrosoftVisualC++
3.实验内容
有一个整数链表,现从此链表派生出一个整数集合类,在集合类中增加一个元素个数的
数据项。
集合类的插入操作与链表相似,只是不插入重复元素,并且插入后,元素个数的数
据成员需增加。
集合类的删除操作是在链表删除操作的基础上对元素个数做减1操作。
而查
找和输出操作是相同的,因此在集合类中不需要重复定义。
#include
#include
//enumbool{false,true};
structelement{//定义链表中的结点结构
intval;
element*next;
};
classlist{//定义链表类
element*elems;
public:
list(){elems=0;}
~list();
virtualboolinsert(int);//此虚函数在派生类中可重新定义
virtualbooldeletes(int);//此虚函数在派生类中可重新定义
boolcontain(int);
voidprint();
};
classset:
publiclist{//将集合类set定义为链表类list的派生类
intcard;
public:
set(){card=0;}
boolinsert(int);//重定义此函数
booldeletes(int);//重定义此函数
};
list:
:
~list()//list类得析构函数定义,循环释放各元素所占的存储
{
element*tmp=elems;
for(element*elem=elems;elem!
=0;)
{
tmp=elem;
elem=elem->next;
deletetmp;
}
}
boollist:
:
insert(intval)//定义list类中插入元素的成员函数
{
element*elem=newelement;//为新元素分配存储
if(elem!
=0){
elem->val=val;//将新元素插入到链表头
elem->next=elems;
elems=elem;
returntrue;
}
elsereturnfalse;
}
boollist:
:
deletes(intval)//定义list类中删除元素的成员函数
{
if(elems==0)returnfalse;//若表为空,返回false
element*tmp=elems;
if(elems->val==val)
{//若待删除的元素为表头元素
elems=elems->next;
deletetmp;
returntrue;
}
else
for(element*elem=elems;elem->next!
=0;elem=elem->next)
if(elem->next->val==val)
{//循环查找待删除元素
tmp=elem->next;
elem->next=tmp->next;
deletetmp;
returntrue;
}
returnfalse;
}
boollist:
:
contain(intval)
{//判元素val在链表中是否存在
if(elems==0)returnfalse;
if(elems->val==val)returntrue;
else
for(element*elem=elems;elem->next!
=0;elem=elem->next)
if(elem->next->val==val)
returntrue;
returnfalse;
}
voidlist:
:
print()//输出链表中各元素
{
if(elems==0)return;
for(element*elem=elems;elem!
=0;elem=elem->next)
cout<
cout< } boolset: : insert(intval)//在set类中的insert的重定义版本 { if( (1)) {//先判断此元素是否存在,然后再调用基类的此函数版本 ++card; returntrue; } returnfalse; } boolset: : deletes(intval)//在set类中的deletes的重定义版本 { if(list: : deletes(val))//调用基类中的此函数版本 { (2); returntrue; } returnfalse; } intmain() { list*ptr,list1; setset1; ptr=&list1; ptr->insert(30); ptr->insert(40); ptr->insert(543); ptr->insert(40); ptr->print(); ptr=&set1; ptr->insert(23); ptr->insert(672); ptr->insert(456); ptr->insert(23); ptr->print(); getch(); return1; } [基本要求] ♉阅读程序,根据题意要求在处填上合适的内容完成程序。 ♉上机录入、调试上面程序。 ♉运行程序,设计测试数据,观察运行结果是否正确且满足题意要求。 4.解答: 1. #include #include //enumbool{false,true}; structelement{//定义链表中的结点结构 intval; element*next; }; classlist{//定义链表类 element*elems; public: list(){elems=0;} ~list(); virtualboolinsert(int);//此虚函数在派生类中可重新定义 virtualbooldeletes(int);//此虚函数在派生类中可重新定义 boolcontain(int); voidprint(); }; classset: publiclist{//将集合类set定义为链表类list的派生类 intcard; public: set(){card=0;} boolinsert(int);//重定义此函数 booldeletes(int);//重定义此函数 }; list: : ~list()//list类得析构函数定义,循环释放各元素所占的存储 { element*tmp=elems; for(element*elem=elems;elem! =0;) { tmp=elem; elem=elem->next; deletetmp; } } boollist: : insert(intval)//定义list类中插入元素的成员函数 { element*elem=newelement;//为新元素分配存储 if(elem! =0){ elem->val=val;//将新元素插入到链表头 elem->next=elems; elems=elem; returntrue; } elsereturnfalse; } boollist: : deletes(intval)//定义list类中删除元素的成员函数 { if(elems==0)returnfalse;//若表为空,返回false element*tmp=elems; if(elems->val==val) {//若待删除的元素为表头元素 elems=elems->next; deletetmp; returntrue; } else for(element*elem=elems;elem->next! =0;elem=elem->next) if(elem->next->val==val) {//循环查找待删除元素 tmp=elem->next; elem->next=tmp->next; deletetmp; returntrue; } returnfalse; } boollist: : contain(intval) {//判元素val在链表中是否存在 if(elems==0)returnfalse; if(elems->val==val)returntrue; else for(element*elem=elems;elem->next! =0;elem=elem->next) if(elem->next->val==val) returntrue; returnfalse; } voidlist: : print()//输出链表中各元素 { if(elems==0)return; for(element*elem=elems;elem! =0;elem=elem->next) cout< cout< } boolset: : insert(intval)//在set类中的insert的重定义版本 { if( (1)) {//先判断此元素是否存在,然后再调用基类的此函数版本 ++card; returntrue; } returnfalse; } boolset: : deletes(intval)//在set类中的deletes的重定义版本 { if(list: : deletes(val))//调用基类中的此函数版本 { (2); returntrue; } returnfalse; } intmain() { list*ptr,list1; setset1; ptr=&list1; ptr->insert(30); ptr->insert(40); ptr->insert(543); ptr->insert(40); ptr->print(); ptr=&set1; ptr->insert(23); ptr->insert(672); ptr->insert(456); ptr->insert(23); ptr->print(); getch(); return1; } [基本要求] ♉阅读程序,根据题意要求在处填上合适的内容完成程序。 ♉上机录入、调试上面程序。 ♉运行程序,设计测试数据,观察运行结果是否正确且满足题意要求。 怎样使用积累的虚函数来构造子类的函数成员 修改后 #include #include //enumbool{false,true}; structelement{//定义链表中的结点结构 intval; element*next; }; classlist{//定义链表类 element*elems; public: list(){elems=0;} ~list(); virtualboolinsert(int);//此虚函数在派生类中可重新定义 virtualbooldeletes(int);//此虚函数在派生类中可重新定义 boolcontain(int); voidprint(); }; classset: publiclist{//将集合类set定义为链表类list的派生类 intcard; public: set(){card=0;} virtualboolinsert(int);//重定义此函数 virtualbooldeletes(int);//重定义此函数 }; list: : ~list(){//list类得析构函数定义,循环释放各元素所占的存储 element*tmp=elems; for(element*elem=elems;elem! =0;) { tmp=elem; elem=elem->next; deletetmp; } } boollist: : insert(intval)//定义list类中插入元素的成员函数 { element*elem=newelement;//为新元素分配存储 if(elem! =0){ elem->val=val;//将新元素插入到链表头 elem->next=elems; elems=elem; returntrue; } elsereturnfalse; } boollist: : deletes(intval)//定义list类中删除元素的成员函数 { if(elems==0)returnfalse;//若表为空,返回false element*tmp=elems; if(elems->val==val) {//若待删除的元素为表头元素 elems=elems->next; deletetmp; returntrue; } else for(element*elem=elems;elem->next! =0;elem=elem->next) if(elem->next->val==val) {//循环查找待删除元素 tmp=elem->next; elem->next=tmp->next; deletetmp; returntrue; } returnfalse; } boollist: : contain(intval) {//判元素val在链表中是否存在if(elems==0)returnfalse; if(elems->val==val)returntrue; else for(element*elem=elems;elem->next! =0;elem=elem->next) if(elem->next->val==val) returntrue; returnfalse; } voidlist: : print()//输出链表中各元素 { if(elems==0)return; for(element*elem=elems;elem! =0;elem=elem->next) cout< cout< } boolset: : insert(intval)//在set类中的insert的重定义版本 { if(list: : insert(val)) {//list: : (val);然后再调用基类的此函数版本 ++card;//先判断此元素是否存在, returntrue; } returnfalse; } boolset: : deletes(intval)//在set类中的deletes的重定义版本 { if(list: : deletes(val))//调用基类中的此函数版本 {//list: : deletes(val); --card; returntrue; } returnfalse; } intmain() { list*ptr,list1; setset1; ptr=&list1; ptr->insert(30); ptr->insert(40); ptr->insert(543); ptr->insert(40); ptr->print(); ptr=&set1; ptr->insert(23); ptr->insert(672); ptr->insert(456); ptr->insert(23); ptr->print(); getch(); return0; } 5.代码测试: 报告者: 林铭霞 2012/5/26
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 实验 报告