| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 532 人关注过本帖
标题:[求助] 简单代友引发的错误
只看楼主 加入收藏
lucis009
Rank: 1
等 级:新手上路
帖 子:181
专家分:0
注 册:2007-5-2
收藏
 问题点数:0 回复次数:1 
[求助] 简单代友引发的错误
#include<iostream.h>
#include<string.h>
class Cstring
{
private:
 char *m_str;
public:
 Cstring();
 Cstring(char *string);
 //重载+
 Cstring operator+(const Cstring &other);
 //重载<<
 friend void operator<<(ostream &stream,const Cstring &str);
 //重载=
 Cstring &operator=(const Cstring &other);
 //析构函数
 ~Cstring();
};

Cstring::Cstring()
{
 m_str=NULL;
}
//普通构造函数
Cstring::Cstring(char *string)
{
 if(string==NULL)
 {
  m_str=new char[1];
  *m_str='\0';
 }
 else
 {
     m_str=new char[strlen(string)+1];
     strcpy(m_str,string);
 }
}
//重载加号
Cstring Cstring::operator +(const Cstring &other)
{
 Cstring temp;
 temp.m_str=new char[strlen(m_str)+strlen(other.m_str)+1];
 strcpy(temp.m_str,m_str);
 strcat(temp.m_str,other.m_str);
 return temp;
}
//重载<<运算符
void operator<<(ostream &stream,const Cstring &str)
{
 stream<<str.m_str<<endl;
}
//析构函数
Cstring::~Cstring()
{
 if(m_str)
  delete [] m_str;      
 m_str=NULL;
}
//重载运算符=
Cstring &Cstring::operator =(const Cstring &other)
{
 if(this==&other)
  return *this;
 if(m_str)
  delete []m_str;
 m_str=new char[strlen(other.m_str)+1];
 strcpy(m_str,other.m_str);
 return *this;
}

//主函数
int main()
{
 Cstring string1("Hello"),string2("every one!");
 Cstring string3;
 cout<<string1;
 cout<<string2;
 string3=string1+string2;
 cout<<string3;
 return 0;
}


//为什么我把析构函数删除了可以正常运行,不删除的话就出现错误
搜索更多相关主题的帖子: private include public friend stream 
2007-11-26 20:42
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
//重载加号
Cstring Cstring::operator +(const Cstring &other)
{
Cstring temp;
temp.m_str=new char[strlen(m_str)+strlen(other.m_str)+1];
strcpy(temp.m_str,m_str);
strcat(temp.m_str,other.m_str);
return Cstring(temp.m_str);
}

问题出在,你这个重载的函数返回的值,在函数结束后也不存在了.所以会出现导常.
只要返回一个副本无名对象就可解决.

[[italic] 本帖最后由 踏魔狼 于 2007-11-26 22:51 编辑 [/italic]]

=×&D o I p R e E n C g T l X&×=
2007-11-26 22:48
快速回复:[求助] 简单代友引发的错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036808 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved