各位前辈帮帮忙,十万火急!!!谢谢

Beijiwangbei 2010-10-24 12:57:57
#include<iostream>
#include<string>
using namespace std;
//
class Alist
{
public:
int size;
int fence;
string* listArray;
//以上为数据成员;一个小的顺序表以string数组为载体。fence表示当前位置。size为其大小。
Alist(const int& i=100)
{
size=i;
fence=0;
listArray=new string[size];
}
//构造函数。
~Alist()
{
delete[]listArray;
}
//析构函数
bool operator==(const Alist& d)
{
if(size!=d.size)
{
return false;
}
else
{
for(int i=0;i<size;++i)
{
if(listArray[i]!=d.listArray[i])
{
return false;
}
}
}
return true;
}
//重载==以便于判断两Alist对象是否相等
Alist operator=(const Alist& d)
{
size=d.size;
fence=0;
for(int i=0;i<d.size;++i)
{
listArray[i]=d.listArray[i];
}
//重载=,用以Alist对象赋值用。
}

};
问题应该是出在两个重载的函数上。
我建一个main函数
头文件包含后
实现这两个。
int main()
{
Alist i;
Alist j=i;
}
会出现内存不可读的错误。
我用的是VC++6.0;
实在是想不通哪儿有问题。请各位高手指教
...全文
48 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcgaoshou 2010-10-24
  • 打赏
  • 举报
回复
#include<iostream>
#include<string>
using namespace std;
class Alist{
int size;
int fence;
string* listArray;
public:
Alist(const int& i=100){
size=i;
fence=0;
listArray=new string[size];
}
~Alist(){
delete[] listArray;
}
Alist(Alist& d){
size=d.size ;
fence=d.fence ;
listArray=new string[size];
listArray=new string[size];
for(int i=0;i<d.size;++i)
listArray[i]=d.listArray[i];
}

bool operator==(const Alist& d){
if(size!=d.size)
return false;
else
for(int i=0;i<size;++i)
if(listArray[i]!=d.listArray[i])
return false;
return true;
}
//重载==以便于判断两Alist对象是否相等
Alist& operator=(const Alist& d){
delete [] listArray;
size=d.size;
fence=d.fence ;
listArray=new string[size];
for(int i=0;i<d.size;++i)
listArray[i]=d.listArray[i];
return *this;
}
};
int main(){
Alist i;
Alist j=i;//调用复制构造函数
i=j; //调用=函数
return 0;
}
vcgaoshou 2010-10-24
  • 打赏
  • 举报
回复
Alist j=i;
该语句是初始化对象,调用类的复制构造函数,而不是调用类的=重载函数
gules 2010-10-24
  • 打赏
  • 举报
回复
错误原因不在这两个重载函数上,而是你没有定义拷贝构造函数(而只定义的赋值操作符,这两个是不一样的)。
你的程序写法为:
Alist j=i; //将调用拷贝构造函数,而不是赋值操作符!

class Alist {
public:
……
Alist(const Alist& d) // 这是拷贝构造函数
: size(d.size), fence(d.fence),
listArray(new string[d.size])
{
for(int i=0;i<size;++i)
{
listArray[i]=d.listArray[i];
}
}

Alist& operator=(const Alist& d) // 此为赋值操作符
{
if (this != &d) {
delete[] listArray; // 释放原内存
size=d.size;
fence=d.fence;
listArray = new string[size]; // 分配新内存
for(int i=0;i<size;++i)
{
listArray[i]=d.listArray[i];
}
}
return *this;
//重载=,用以Alist对象赋值用。
}
};

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧