收藏 分享(赏)

实验六_继承与派生(下).doc

上传人:hwpkd79526 文档编号:9584289 上传时间:2019-08-16 格式:DOC 页数:8 大小:265.50KB
下载 相关 举报
实验六_继承与派生(下).doc_第1页
第1页 / 共8页
实验六_继承与派生(下).doc_第2页
第2页 / 共8页
实验六_继承与派生(下).doc_第3页
第3页 / 共8页
实验六_继承与派生(下).doc_第4页
第4页 / 共8页
实验六_继承与派生(下).doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、 实验报告课程名称 面向对象程序设计系 别 机械与电子工程系班 级 N 电信-091F学生姓名 邓建平 07学 号 24092200003任课教师 齐 琦南湖学院教务办实验六 继承与派生(下)一、实验目的:掌握类模板和模板类的概念,了解它们的定义和使用掌握多重继承的使用二、实验内容;题目一:定义一个单向链表的模板类,实现添加、删除、查找操作。要求使用模板类。 。注意:可参考课堂代码实现。代码:#include #include using namespace std;template class List; /对 List 类的申明template class Node /定义一个描述节点的类

2、T data;Node * next;public:Node();Node(T d);void InsertAfter(Node *p);Node * RemoveAfter();friend class List;templateNode:Node()data=0;next=NULL;templateNode:Node(T d)data=d;next=NULL;templatevoid Node:InsertAfter(Node *p)p-next=next;next=p;templateNode * Node:RemoveAfter()Node*temp=next;if(next!=NUL

3、L)next=temp-next;return temp;templateclass List /定义一个描述链表的类Node * head,* rear;public:List(); /空链表的构造(链表中只含表头结点)void MakeEmpty(); /清空链表(删除链表中除表头结点以外的所有结点)List(); /析构函数Node * Find(T d); /查找数据域与 d 相同的结点(返回所找到结点的指针)int Length(); /计算链表长度(返回链表中除表头结点以外的结点个数)void PrintList(); /输出链表中各结点的数据域void InsertFront(N

4、ode *p); /向前插入结点(链表首部插入一个结点)void InsertFront(T d);void InsertRear(T d);void InsertRear(Node *p); /向后插入结点(链表尾部插入一个结点)void InsertOrder(Node *p); /有序插入结点(插入结点后链表仍有序)Node * CreateNode(T d); /创建数据域为 d 的新结点(返回新结点的指针)void Save();void Read();void CreateList();Node * DeleteNode(Node *p); /从链表中删除指针为 p 的结点; te

5、mplateList:List()head=rear=new Node;templatevoid List:MakeEmpty()Node *temp;while(head-next!=NULL) temp = head-next ;head-next = temp-next ; delete temp ; rear = head;templateList:List()MakeEmpty();delete head;templateNode * List:Find(T d) Node*temp=head-next;while(temp != NULL return temp;templatei

6、nt List:Length() Node*temp = head-next;int count = 0 ;while (temp!= NULL)temp=temp-next ;count+ ;return count ;templatevoid List:PrintList()Node*temp = head-next;while(temp!=NULL)coutdatanext ; templatevoid List:InsertFront(T d)Node *temp=new Node;temp-data=d;temp-next=head-next;head-next=temp;if(re

7、ar=head)rear=temp;templatevoid List:InsertFront(Node*p) p-next = head-next ; head-next = p ; if(rear = head )rear = p ;templatevoid List:InsertRear(T d)rear-next=new Node;rear-next-data=d;rear=rear-next;rear-next=NULL;templatevoid List:InsertRear(Node*p) rear-next =new Node;rear-next-data=p-data;rea

8、r=rear-next;rear-next = NULL ; templateNode * List:CreateNode(T d) Node *temp = new Node(d);return temp ; templatevoid List:CreateList()T d;coutd)rear-next=new Node;rear-next-data=d;rear=rear-next;rear-next=NULL;templatevoid List:Save()ofstream outfile(“data.txt“,ios:app);Node*temp = head-next;while

9、(temp!=NULL)outfiledatanext ; templatevoid List:Read()ifstream infile(“data.txt“);if(!infile)coutd)rear-next=new Node;rear-next-data=d;rear=rear-next;rear-next=NULL;templatevoid List:InsertOrder(Node*p)Node *temp1 = head ;Node *temp2 = head-next ; /temp1 指向 temp2 的前面的一个结点while(temp2!=NULL) if(p-data

10、temp2-data)break ; /找到第一个比要插入结点小的结点,则可以确定新结点须插入在 temp2 前。temp1=temp2;temp2=temp2-next; temp1-InsertAfter(p);if (rear=temp1) rear=temp1-next; templateNode * List:DeleteNode(Node*p) Node *temp = head ;while(temp-next!= NULL if(temp-next = rear ) rear = temp ;return temp-RemoveAfter();void main()List l

11、;l.CreateList();l.PrintList();coutusing namespace std; class personchar *name;int age;public:person()cout“the constructor of class person!n“;person()cout“the dstructor of class person!n“;class student: virtual public personchar *department;int level;public:student()cout“the constructor of class stud

12、ent!n“;student()cout“the constructor of class student!n“;class teacher: virtual public personchar *major;int salary;public:teacher()cout“the constructor of class teacher!n“;teacher()cout“the constructor of class teacher!n“; class Postgraduate:public student,public teacherpublic:Postgraduate()cout“the constructor of class Postgraduate!n“;Postgraduate()cout“the constructor of class Postgraduate!n“;main()Postgraduate a();三、实验总结在本次实验中主要强调多重继承问题。在派生类的声明中,基类可以有一个,也可以多个,如果有多个基类,则这种继承方式称为多重继承。这时的派生类同时得到了多个已有类的特征。在使用多重派生的时候要避免出现二义性,此时可以使用成员名限定来消除二义性,也就是在成员名前用对象名及基类名来限定。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报