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