开设赌场罪情节严重:VC++运算符重载的问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 12:01:11
我的课程设计中有一环是编写一个字符串类,作用是把两个字符串相连接(用+号),编译没有问题,但运行出现错误,不知道什么原因(软件 VC++ 6.0)?或者能重写一个给我,不胜感激!

<文件名:String.h>

#include <string.h>
#include <stdio.h>

/*创建一个字符串类:String*/

class String{
public:
String(const char* str = NULL); //构造函数之一
String(const String& another); //构造函数之二
void input_str(); //字符串输入
String& operator +(const String& rhs); //重载加法运算符
void print(); //字符串输出
private:
char *m_data;
char *addstr;
};

<文件名:String.cpp>

#include <iostream.h>
#include "String.h"

/*构造函数之一*/

String::String(const char* str)
{
if(str == NULL) //如果输入为空字符串,则添加“\0”表示空串。
{
m_data = new char[1];
m_data[0] = '\0';
}
else //如果输入非空串,复制该字符串。
{
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
}
}

/*构造函数之二*/

String::String(const String& another)
{
m_data = new char[strlen(another.m_data) + 1];
strcpy(m_data,another.m_data);
}

/*输入字符串*/

void String::input_str()
{
char str[256];
printf("请输入字符串:");
cin>>str;
printf("\n");
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
}

/*连接后的字符串输出*/

void String::print()
{
if(addstr == NULL) printf("No Content!\n");
else
{
for(char *c = addstr; *c != '\0'; c++)
printf("%c", *c);
printf("\n");
}
}

//"+"运算符重载

String& String::operator+(const String& rhs)
{
delete []addstr;
addstr=new char[strlen(m_data)+strlen(rhs.m_data)+1];
strcpy(addstr,m_data);
strcat(addstr,rhs.m_data);
return *this;
}

<文件名:Str_main.cpp>

#include "String.h"

/*开始演示字符串类*/

void main()
{
String S1;
String S2;

S1.input_str();
S2.input_str();

S1+S2;

S1.print();

}
谢谢1楼的指教:)我不是这个专业的难免有错:)依您的意思,应该如何实现这个字符串类了呢?

delete []addstr; 这句
你都没有new 哪来的delete
如果只追求功能的实现
把这句去掉就应该没问题

你的addstr这个变量是做什么的?我觉得不需要,可以直接用一个临时变量解决,你说的出问题,你也没有说明出的什么问题,照理说是不会有问题的,说实话,你这样相当容易出错,而且也不符合C++规范

看你的代码有点乱。