求助,关于重载运算符

fan318 2009-06-02 03:56:59
重载运算符+,=,==,实现字符串连接,字符串的拷贝赋值,字符串的判断相等

#include <iostream.h>
#include <string.h>
class string
{
char* ptr;
public:
string();
string(char* s);
virtual ~string();
void print();
string& operator = (const string& s);
string operator + (string& s2);
bool operator == (string& s2);

};
string::string()
{

}

string::string(char* s)
{
ptr = new char[strlen(s)+1];
strcpy(ptr,s);
}

void string::print()
{
cout << ptr << endl;
}
string::~string()
{
delete ptr;
}

string& string::operator = (const string& s)
{
if ( this == &s)
{
return *this;
}
delete ptr;
ptr = new char[strlen(s.ptr)+1];
strcpy(ptr,s.ptr);
return *this;
}

string string::operator + (string& s2)
{
if (s2.ptr == NULL)
{
return *this;
}
char *p = NULL;
p = new char[strlen(ptr)+strlen(s2.ptr)+1];
while ( *ptr != '\0' )
{
*p++ = *ptr++;

}
while ( *s2.ptr != '\0' )
{
*p++ = *s2.ptr++;

}
p = '\0';
delete ptr;
ptr = new char[strlen(p)];
strcpy(ptr,p);
return *this;

}

bool string::operator == (string& s2)
{
if ( strcmp(ptr,s2.ptr) == 0 )
{
return true;
}
else
return false;
}

void main()
{
string p1("book");
{
string p2("pen");
cout << "p2 ";
p2.print();
p2 = p1;
cout << "p2 ";
p2.print();
}
cout << "p1 ";
p1.print();
string p3("china");
p3 = p3 + p1;
if ( p1 == p3 )
{
cout << "p1与p3一致" << endl;
}
else
{
cout << "p1与p3不一致" << endl;
}

}
...全文
156 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fan318 2009-06-02
  • 打赏
  • 举报
回复
在VC环境还是运行不过去啊!!
wanyuzhen 2009-06-02
  • 打赏
  • 举报
回复
错误有两个,改后的:
string &string::operator + (string& s2)
{
if (s2.ptr == NULL)
{
return *this;
}
char *p = NULL,*tempp ;
p = new char[strlen(ptr)+strlen(s2.ptr)+1];
tempp = p;
char *temp = ptr;
while ( *temp != '\0' )
{
*p++ = *temp++;

}
temp = s2.ptr;
while ((*p++ = *temp++));

delete ptr;
ptr = new char[strlen(tempp)];
strcpy(ptr,tempp);
return *this;

}
第二个是p3 = p3 +p1运行+后,应该是自身复制
fan318 2009-06-02
  • 打赏
  • 举报
回复
还是有问题啊!!!
是内存错误吗??
wanyuzhen 2009-06-02
  • 打赏
  • 举报
回复

在string string::operator + (string& s2)里

while ( *ptr != '\0' )
{
*p++ = *ptr++;

}
指针ptr最后为'\0'
总之可以这样:
char *temp = ptr;
while ( *temp != '\0' )
{
*p++ = *temp++;

}
temp = s2.ptr;
while ( *s2.ptr != '\0' )
{
*p++ = *temp++;

}
fan318 2009-06-02
  • 打赏
  • 举报
回复
运行p3 = p3 + p1;时出错,是什么原因??
smaltdd 2009-06-02
  • 打赏
  • 举报
回复
你的问题是啥?

最好说明,难道还要去研究你的整个代码?

65,210

社区成员

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

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