首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这段程序编译连接都没有关问题,但一执行就出现有关问题,大家来看看

2013-11-13 
这段程序编译连接都没问题,但一执行就出现问题,大家来看看#includeiostream#includestringusing names

这段程序编译连接都没问题,但一执行就出现问题,大家来看看
#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=的实现应该是基本一致的(其中一个可以调用另一个)

热点排行