求助!高手帮帮忙!我的程序总是不对!

来源:百度知道 编辑:UC知道 时间:2024/06/04 15:28:26
#include<iostream.h>
class astring1
{
private:
int length;
char*contents;
public:
astring1(){}
~astring1(){}
void set_contents(char*in_contents);
void print();
astring1 operator+(astring1 &obj1);
void operator==(astring1 &obj1);

};

void astring1::set_contents(char*in_contents)
{
contents=in_contents;
int len=0;
while(*in_contents++!='\0')
len++;
length=len;
}

void astring1::print()
{
cout<<"The string is: "<<contents<<endl<<"the length is: "<<length<<endl;
}

astring1 astring1::operator+(astring1 &obj1)
{
astring1 temp;
char*p,*q;
p=new char;
q=contents;
temp.length=length+obj1.length;
for(;*q!='\0';q++,p++)
*p=*q;
for(;*obj1.contents!='\0';obj1.contents++,p

那是因为你的"+"重载函数的问题,按照你的加重载函数,那你的cc=aa+bb实际执行的是aa=aa+bb,所以,你将cc=aa+bb屏蔽掉时,aa==bb就可以正确运行(因为这时aa和bb没有发生任何变化),但是如果先运行cc=aa+bb(这时aa="hello!hello!\0",而bb="hello!\0"),那么后面的aa==bb就不对了(因为aa!=bb了)。你可以在cc.print(); 前面加上两行aa.print();和bb.print()测试一下,看我说的对不对。

(2007-05-21)
不好意思,上次因为时间关系没怎么仔细看。刚好好看了一下,还是你的"+"重载函数的问题,只是不是我上次说的那个问题,你的错误在于“+”重载函数是把bb的指针引用了,所以在你执行
for(;*obj1.contents!='\0';obj1.contents++,p++)
*p=*obj1.contents;
这个循环时把bb.contents的值给改成指向字符串尾了,因为obj1是指向bb的指针,当你执行obj1.contents++时,实际上是bb.contents自加1了,也就是说循环结束后,bb.contents指向了字符串最后的'\0',所以再执行aa==bb就出错了,我把“+”重载函数给你改了一下,代码如下,你自己再试试能不能正常运行了。
astring1 astring1::operator+(astring1 &obj1)
{
astring1 temp;
char*p,*q,*string2;
p=new char;
q=contents;
string2=obj1.contents;
temp.length=length+obj1.length;
for(;*q!='\0';q++,p++)
*p=*q;
for(;*string2!='\0';sting2++,p