读书人

这段程序编译连接都没有关问题但一执

发布时间: 2013-11-13 14:04:18 作者: rapoo

这段程序编译连接都没问题,但一执行就出现问题,大家来看看
#include<iostream>
#include<string>
using namespace std;
class String
{
public:
String(const char *str = NULL);// constructor
String(const String &other); // copy constructor
~ String(void){delete []m_data;};// destructor
String & operator =(char *str);
String & operator =(const String &other);// 重载=运算符
int operator==(String &other);// 重载==运算符
int operator==(char *str);
void display();
private:
char *m_data; // used for storing the string
int length;
};

String::String(const String &other) //拷贝构造函数
{
m_data=new char[strlen(other.m_data)+1];
if(m_data!=0)
strcpy(m_data,other.m_data);
length=strlen(m_data);
}

String::String(const char *str)
{
m_data=new char[strlen(str)+1];
if(m_data!=0)
strcpy(m_data,str);
length=strlen(m_data);
}

String & String::operator =(char *str)
{
m_data=new char[strlen(str)+1];
if(m_data!=0)
strcpy(m_data,str);
//length=strlen(m_data);
return *this;
}

String & String::operator =(const String & other)
{
if(this!=&other)
{
m_data=new char[strlen(other.m_data)+1];
delete []m_data;
if(m_data!=0)
strcpy(m_data,other.m_data);
return *this;
}
}

void String::display()
{
cout<<m_data<<" "<<length<<endl;
}

void main()
{
String s1("first"),s2("second"),s3;
s1.display();
s2.display();
s3.display();
s3="fourth";
}
[解决办法]
String(const char *str = NULL);
采用了默认形参值,实现的时候没有对这个特殊情况进行判断就直接strlen()。
这是造成运行是错误的直接原因。

另外,String & String::operator =( char *str)
实现中有内存泄露

再好好改改吧,两个operator=的实现应该是基本一致的(其中一个可以调用另一个)

读书人网 >C++

热点推荐