C++ 顺序表

来源:百度知道 编辑:UC知道 时间:2024/06/25 17:51:37
我的程序如下,开始可以运行,但是添加了赋值运算符重载和拷贝构造函数后就挂了.. 各位大侠帮忙看看。
// 头文件
class SqList
{public:
SqList(int num);
void init(int num);
void list();
int length()const;
bool empty()const;
void clear();
void traverse();
bool full()const;
int getElem(int pos)const;
void setElem(int pos,int e);
int insertElem(int pos,int num);
int deleteElem(int pos);
SqList(const SqList&);
SqList &operator=(const SqList&);
void display();
private:
const static int size=20;
int array[size];
int count;};
// cpp文件
#include<iostream>
using std::cout;
using std::endl;
#include"SqList.h"
SqList::SqList(int num) // constructor
{init(num);}

void SqList::init(int num)
{count=num;
for(int i=0;i<length();i++)
array[i]=i;}

void SqList::list(){}

int SqList::length()const
{return count;}

bool SqList::e

看完代码,用一只字形容为:乱。
数组的下标是混乱的(形参传入去前加1,传入去又减1,简直是折磨人,跟自己过不去!
其次是变量名的使用,比如你的count,其实应用"size"合适点,而size应该为maxsize。

然后就是一些函数上的错误,最大的错误是使用insert函数,一开始对象里面根本没有数据,而你把count设为了1,即是承认了原来数组中的第一个数据,这样操作完毕后对象中的数据就多出一个了。其次,也不应该使用insert函数,因为是“=”操作符,应该把原来的数据清了,然后把新的数据复制进来,而不是插入操作。
另外显示函数也不正确。

对于其他未使用过的函数,我就不帮你修改了,略看了一下,就算没错,效率上也有待提高。

修改这两个函数就ok了:
SqList &SqList::operator =(const SqList& copy)
{
clear();
count = copy.length();
if(length() == 0)
{
cout<<"The two objects are empty!"<<endl;
return *this;//根本没有数据
}
if(©!=this)
{
for(int i=0;i<length();i++)//修改过的
array[i] = copy.getElem(i+1);
}
else
{
cout<<"The two object are same!"<<endl;
}
return *this;
}

void SqList::display()//修改过的
{
for(int i=0;i<count;i++)
cout<<array[i]<<"