函数重载的时候出现问题了!
我又到这里来求助了,这次又找不到问题出在哪里了。还望大家指教!编译,组建都通过了,但是运行出现了对话框。" border="0" />
源代码如下:
// 处理一个由数组构成的线性表,动态产生线性表,并输出线性表中的数据。
#include <iostream.h>
class ListClass
{
int *ListPtr; // 指向线性表的指针
int nMax; // 线性表的最大长度
int nElem; // 线性表中的当前元素的个数
public:
ListClass(int n=10) // 构造函数,初始化线性表,最大长度10为初始值
{
nElem = 0;
nMax = n;
if (n)
ListPtr = new int[n];
else
ListPtr = 0;
}
~ListClass(void) // 析构函数
{
delete [nMax]ListPtr;
}
int Elem(int); // 重载函数①,在线性表尾增加一个元素
int &Elem(unsigned n) // 重载函数②,返回线性表中第n个元素的引用
{
return nElem;
}
int Elem(void) // 重载函数③,返回线性表中当前元素的个数
{
return nElem;
}
int Max(void) // 返回线性表的长度
{
return nMax;
}
int GetElem(int i) // 返回线性表的第i个元素
{
if ((i>0) && (i<nElem))
return ListPtr[i];
else
{
cout << "下标越界" << endl;
return (0);
}
}
void Print(void); // 输出线性表中的所有元素
};
int ListClass::Elem(int elem) // 重载函数①,在线性表尾增加一个元素
{
if (nElem<nMax) // 如果实际元素个数小于表的长度
{
ListPtr[nElem++] = elem; // 增加元素
return (nElem); // 返回新表的元素个数
}
else // 如果实际元素个数等于表的长度
{
int *newptr;
newptr = new int[nMax+10]; // 申请一新表空间
for (int i=0; i<nElem; i++)
newptr[i] = ListPtr[i]; // 将原表中的元素拷贝到新表中
delete [nMax]ListPtr; // 释放原表空间
nMax += 10;
ListPtr = newptr;
ListPtr[nElem++] = elem; // 增加元素
return (nElem); // 返回新表中的元素个数
}
}
void ListClass::Print(void) // 输出线性表中的所有元素
{
for (int i=0; i<nElem; i++)
cout << ListPtr[i] << '\t';
cout << endl;
}
void main()
{
ListClass list(6);
for (int i=0; i<5; i++)
list.Elem(i); // 调用重载函数①
cout << "线性表的长度为:" << list.Max() << endl;
cout << "线性表的元素个数为:";
cout << list.Elem() << endl; // 调用重载函数③
cout << "线性表的元素为:";
list.Print();
list.Elem(3u) = 100; // 调用重载函数②
cout << "线性表的第三个元素的值为:";
cout << list.Elem(3u) << endl; // 调用重载函数②
list.Elem(20); // 调用重载函数①
list.Elem(200); // 调用重载函数①
cout << "现在线性表的长度为:" << list.Max() << endl;
cout << "现在线性表中的元素个数为:";
cout << list.Elem() << endl; // 调用重载函数③
cout << "线性表的元素为:";
list.Print();
cout << "线性表的最后一个元素为:";
cout << list.GetElem(list.Elem()-1) << endl;
}