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

operator =的有关问题

2012-02-04 
operator 的问题编写程序如下://string.h#includeiostreamusingnamespacestdclassString{public:Strin

operator =的问题
编写程序如下:
//string.h
#include   <iostream>
using   namespace   std;
class   String{
public:
String(   const   char   *str=NULL   );
String(const   String   &other);
~String();
String   &   operator=(   String   &other   );
void   print();
private:
char   *m_data;
};

//string.cpp
#include   "String.h "
#include   <cstring>
#include   <iostream>
using   namespace   std;

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

}

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

String::~String()
{
delete   []   m_data;
}


String&   String::operator   =(     String   &other   )
{
return   other;
}


void   String::print()
{
cout   < <   m_data   < <endl;
}

//main.cpp
#include   "String.h "
int   main()
{
String   s1( "hello ");
String   s2;
s2   =   s1;
s1.print();
s2.print();
return   0;
}


为什么结果只打印了一个hello,按说应该是两个才对啊.如果这样做有问题出在什么地方呢?
我知道可以使用
String&   String::operator   =(   const   String   &other   )
{
if   (this   ==   &other   )
return   *this;

delete   []   m_data;

int   length   =   strlen(   other.m_data   );
m_data   =   new   char[   length+1   ];
strcpy(   m_data,   other.m_data   );

return   *this;
}
解决问题,但是return   *this和return   other的区别是什么呢?

[解决办法]
return other或者*this都只是为了实现链式操作,S2调用=操作符但是并没有接收这个return值,你只打印出来一个hello是因为你并没有在函数中将源字符串内容拷贝给调用=的字符串。
[解决办法]
上面说错了,应该是使用String& 。
参见:
http://www.trainlinux.com/p/2002-11-17/6323.html

热点排行