C++作业4Word文件下载.docx
- 文档编号:7115469
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:18
- 大小:81.88KB
C++作业4Word文件下载.docx
《C++作业4Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++作业4Word文件下载.docx(18页珍藏版)》请在冰点文库上搜索。
//拷贝构造函数
~Array(void);
//析构函数
Array<
operator=(constArray<
rhs);
//重载“=”使数组对象可以整体赋值
T&
operator[](inti);
operatorT*(void)const;
//重载"
[]"
与T*,使Array对象可以起到C++普通数组的作用
intListSize(void)const;
//取数组的大小
voidResize(intsz);
//修改数组的大小
};
//以下为类成员函数的实现
//模扳函数Error实现输出错误信息的功能
voidArray<
:
Error(ErrorTypeerror,intbadIndex)const
cout<
<
errorMsg[error];
//根据错误类型,输出相应的错误信息
//forindexOutOfRange,printthebadindex
if(error==indexOutOfRange)
cout<
badIndex;
//如果是下标越界错,输出错误的下标
endl;
exit
(1);
}
//构造函数
Array<
Array(intsz)
if(sz<
=0)//sz为数组大小(元素个数),若小于0,则输出错误信息
Error(invalidArraySize);
size=sz;
//将元素个数赋值给变量size
alist=newT[size];
//动态分配size个T类型的元素空间
if(alist==NULL)//如果分配内存不成功,输出错误信息
Error(memoryAllocationError);
//析构函数
~Array(void)
{delete[]alist;
}
//复制构造函数
Array(constArray<
X)
intn=X.size;
size=n;
//从对象X取得数组大小,并赋值给当前对象的成员
//为对象申请内存并进行出错检查
alist=newT[n];
//动态分配n个T类型的元素空间
if(alist==NULL)//如果分配内存不成功,输出错误信息
//从对象X复制数组元素到本对象
T*srcptr=X.alist;
//X.alist是对象X的数组首地址
T*destptr=alist;
//alist是本对象中的数组首地址
while(n--)//逐个复制数组元素
*destptr++=*srcptr++;
//重载“=”运算符rhs赋值给本对象,实现对象之间的整体赋值
operator=(constArray<
rhs)
intn=rhs.size;
//取rhs的数组大小
if(size!
=n)
{//如果本对象中数组大小和rhs不同,则删除数组原有内存,然后重新分配
delete[]list;
//删除数组原有内存
alist=newT[n];
//重新分配n个元素的内存
if(alist==NULL)//如果内存分配不成功,输出错误信息
Error(memoryAllocationError);
size=n;
//设置本对象的数组大小
//从rhs向本对象复制元素
T*srcptr=rhs.alist;
while(n--)//逐个复制数组元素
return*this;
//返回指向本对象的指针
//重载下标运算符,实现与普通数组一样通过下标元素,并且具有越界检查功能
T&
operator[](intn)
if(n<
0||n>
size-1)//检查下标是否越界
Error(indexOutOfRange,n);
returnalist[n];
//返回下标为n的数组元素
//重载指针转换运算符,使指向t类对象的指针成为当前对象中私有数组的首地址,
//因而可以像使用普通数组首地址一样使用t类型指针。
operatorT*(void)const
{returnalist;
//返回当前对象中私有数组的首地址}
//取当前数组的大小
intArray<
ListSize(void)const
{returnsize;
//将数组大小修改为sz
Resize(intsz)
if(sz<
=0)//检查是否sz<
=0
if(sz==size)//如果指定的大小与原有大小一样,什么也不做
return;
T*newlist=newT[sz];
//申请新的数组内存,并测试是否申请成功
if(newlist==NULL)Error(memoryAllocationError);
intn=(sz<
size)?
sz:
size;
//将sz与size中较小的一个值赋给n
//将原有数组中前n个元素复制到新数组中
T*srcptr=alist;
//原数组alist的首地址
T*destptr=newlist;
//新数组newlist的首地址
while(n--)//逐个复制数组元素
*destptr++=*srcptr++;
delete[]alist;
//删除原数组
alist=newlist;
//使alist指向新数组
size=sz;
//更新size
#endif//array_class
//9.1数组类模板Array.cpp
iomanip.h>
voidmain()
intn;
doubleaverscore,totalscore=0;
cout<
请输入学生人数:
"
;
cin>
>
n;
float>
score(n);
for(inti=0;
i<
i++)
{
cout<
请输入第:
i+1<
个学生的课程A成绩(0~100):
cin>
score[i];
totalscore+=score[i];
averscore=totalscore/n;
平均成绩为:
setprecision(4)<
averscore<
endl;
9-5使用本章中的链表类模板,声明两个int类型的链表a和b,分别插入5个元素,然后
把b中的元素加入a的尾部。
//node.h
#ifndefNODE_H//结点类模板
#defineNODE_H
template<
classlinkedlist;
//新添
classnode
{private:
node<
*next;
Tdata;
node(constT&
data,node<
*next=0);
voidinsertAfter(node<
*p);
node<
*deleteAfter();
*nextNode();
constnode<
*nextNode()const;
friendlinkedlist<
node<
node(constT&
*next/*=0*/):
data(data),next(next){}
*node<
nextNode()
{returnnext;
constnode<
nextNode()const
voidnode<
insertAfter(node<
*p)
{p->
next=next;
next=p;
deleteAfter()
*tempPtr=next;
if(next==0)return0;
next=tempPtr->
next;
returntempPtr;
#endif
//linkedlist.h
#ifndefLINKEDLIST_H
#defineLINKEDLIST_H
#include<
iostream>
#include"
node.h"
classlinkedlist
*front,*rear;
*prevPtr,*currPtr;
intsize;
intposition;
*nextNode(constT&
item,node<
*ptrNext=NULL);
voidfreeNode(node<
voidcopy(linkedlist<
L);
public:
voidprint();
linkedlist();
linkedlist(linkedlist<
~linkedlist();
linkedlist<
operator=(linkedlist<
intgetSize()const;
boolisEmpty()const;
voidreset(intpos=0);
voidnext();
boolendOfList()const;
intcurrentPosition(void);
voidinsertFront(constT&
item);
voidinsertRear(constT&
voidinsertAt(constT&
voidinsertAfter(constT&
TdeleteFront();
voiddeleteCurrent();
data();
constT&
data()const;
voidclear();
*linkedlist<
nextNode(constT&
*ptrNext)
{node<
*tempPtr=newnode<
(item,ptrNext);
voidlinkedlist<
freeNode(node<
*p)//释放结点
{deletep;
print()
{reset();
while(!
endOfList()){cout<
data()<
next();
size="
getSize()<
linkedlist<
linkedlist()//构造函数
{size=0;
front=rear=newnode<
(0);
currPtr=prevPtr=front;
intlinkedlist<
currentPosition(void)//返回游标当前的位置
{node<
*tempPtr=front->
nextNode();
position=0;
while(tempPtr!
=currPtr)
{tempPtr=tempPtr->
position++;
returnposition;
getSize()const//返回链表中的元素个数
{returnsize;
data()//返回对当前结点成员数据的引用
{returncurrPtr->
data;
constT&
data()const//返回对当前结点成员数据的常引用
next()//使游标移动到下一个结点
prevPtr=currPtr;
currPtr=currPtr->
boollinkedlist<
endOfList()const//游标是否到了链尾
if(currPtr==NULL)returntrue;
elsereturnfalse;
isEmpty()const//链表是否为空
if(front==rear)returntrue;
reset(intpos)//初始化游标的位置(第一位数的位置设为0)
prevPtr=front;
currPtr=front->
position=pos;
position;
prevPtr=currPtr;
currPtr=currPtr->
insertFront(constT&
item)//在表头插入结点
currPtr=nextNode(item,front->
nextNode());
front->
next=currPtr;
if(rear==front)
rear=currPtr;
size++;
insertRear(constT&
item)//在表尾添加结点
currPtr=nextNode(item,rear->
rear->
rear=currPtr;
insertAfter(constT&
item)//在当前结点之后插入结点
*tempPtr=nextNode(item,currPtr->
currPtr->
next=tempPtr;
if(currPtr==rear)
{rear=tempPtr;
currPtr=tempPtr;
insertAt(constT&
item)//在当前结点之前插入结点
currPtr=nextNode(item,prevPtr->
prevPtr->
Tlinkedlist<
deleteFront()//删除头结点
{currPtr=front->
deletefront;
front=currPtr;
size--;
returnfront->
deleteCurrent()//删除当前结点
*tempPtr=currPtr;
deleteAfter();
deletecurrPtr;
currPtr=prevPtr;
clear()//清空链表:
释放所有结点的内存空间。
被析构函数和“operator="
调用
=NULL)
*tempQ=tempPtr;
tempPtr=tempPtr->
deletetempQ;
rear=front;
~linkedlist()//析构函数
{clear();
copy(linkedlist<
L)//将链表L复制到当前表(假设当前表为空)被复制构造函数和“operator=”调用
//(因实现需要,无法使用(linkedlist<
const&
L)作为形参表)
{//clear();
L.reset();
L.size;
i++){insertRear(L.data());
L.next();
operator=(linkedlist<
L)//重载赋值运算符(因实现需要,无法使用(linkedlist<
next=NULL;
copy(L);
调用重载运算符="
linkedlist(linkedlist<
L)//复制构造函数(因实现需要,无法使用(linkedlist<
{size=0;
调用复制构造函数"
#include"
linkedlist.h"
usingnamespacestd;
linkedlist<
int>
list1;
pleaseinputthelinka"
list2;
5;
i++){intitem;
item;
list1.insertRear(item);
a:
list1.reset();
list1.endOfList()){cout<
list1.data()<
list1.next();
pleaseinputthelinkb"
for(intj=0;
j<
j++){intitem;
list2.insertRear(item);
b:
list2.reset();
list2.endOfList()){cout<
list2.data()<
list2.next();
}
cout<
在a中插入b后,链表为:
l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 作业