String类的赋值函数

wangqm0629 2006-11-25 08:24:15
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;
}

问题1:if (this == &other)为什么不能写成if (*this == other)?
问题2:return *this 为什么不能写成 return this,书上说是为了实现赋值的链式表达,高手能否详细介绍一下返回一个引用可以实现链式表达?
...全文
213 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
无知者无谓 2006-12-03
  • 打赏
  • 举报
回复
g_xRocky() 说得对,这个判断是为了避免同一个对象赋值的情况
wangqm0629 2006-12-03
  • 打赏
  • 举报
回复
楼上的兄弟,多谢了
g_xRocky 2006-12-03
  • 打赏
  • 举报
回复
给点参考性意见吧:
首先:必须明白指针和对象的区别,这个可以查书,不说了.
第一个问题:如果写成if (*this == other)比较的两个对象,写成if (this == &other)比较的刚是两个对象的指针,这个明显是不一样的,就像网友PLYAT说的,而operator=判断的是不是<自赋值>,所以不能用if (*this == other).
第二个问题:建议你思考一下在return this 和 return *this 两种情况下(a = b) = c, 与 a = (b = c)的区别
wangqm0629 2006-12-02
  • 打赏
  • 举报
回复
高手看过来啊
Andrionda 2006-11-26
  • 打赏
  • 举报
回复
if (this == &other)
{
return *this;
}
是判断是不是自赋值.
如果改为: if (*this == other) 两个对象进行比较,没有什么意义.
hyg2008 2006-11-26
  • 打赏
  • 举报
回复
1.你想对类的实例做 == 操作?
2.返回类型为引用,当然要用*this,因为需要返回的是一个对象的引用而不是指针。
指针能实现链式表达,引用也能。
wangqm0629 2006-11-26
  • 打赏
  • 举报
回复
高手呢,过来看看吧
wangqm0629 2006-11-26
  • 打赏
  • 举报
回复
高手看过来!!
String a, b, c;
[1] 若将a=b=c; 改为(a=b)=c后分别调用String operator=(const String& a) 和String&operator=(const String& a)结果会有什么不同?
[2] 能否将String&operator=(const String& a)改为const String&operator=(const String& a)?
[3] 能否将String&operator=(const String& a)中的return *this;改为return a?
[4] String a, b;
a = b;
与 String a;
A b = a; 有什么不同?
wangqm0629 2006-11-26
  • 打赏
  • 举报
回复
if (*this == other) 两个对象进行比较,没有什么意义
为什么?
wangqm0629 2006-11-25
  • 打赏
  • 举报
回复
ding

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧