关于赋值函数和拷贝函数的问题!

minanqiang 2005-01-19 01:06:36
下面是一个string类:
String::~String(void)
{
delete [] m_data;
// 由于m_data是内部数据类型,也可以写成 delete m_data;
}

// String的普通构造函数
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1]; // 若能加 NULL 判断则更好
*m_data = ‘\0’;
}
else
{
int length = strlen(str);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, str);
}
}
// 拷贝构造函数
String::String(const String &other)
{
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, other.m_data);
}
// 赋值函数
String & String::operate =(const String &other)
{
// (1) 检查自赋值 // 4分
if(this == &other)//问题一
return *this;

// (2) 释放原有的内存资源
delete [] m_data;

// (3)分配新的内存资源,并复制内容
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, other.m_data);

// (4)返回本对象的引用
return *this;//问题二
}
问题一:
if(this == &other)//问题一
这个是什么意思?
为什么不取this == other
int &n=i;
n是i的引用
那&n是什么意思?

问题二
return *this;//问题二
为什么要返回*this?return this是什么意思?
为什么要加个*?
*this什么含义?和this的区别是什么?




...全文
209 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
daylove 2005-01-19
  • 打赏
  • 举报
回复
if(this == &other)//问题一

这里this是一个指针,它被自动设置为指向左侧的类对象,这个this 指针表示被调用的类对象的地址,所以应该用&other,而不是other

问题二

*this,这时访问的是this 所指的实际对象,这里需要返回对象的引用
suyouxin 2005-01-19
  • 打赏
  • 举报
回复
if(this == &other)//问题一
other这里是个引用,&other就是取的other对象的地址,这里是判断this(也就是这个实例类本身)
是否和other是同一个实例.

为什么不取this == other
this是指向本对象的指针, 而other是引用

return *this;//问题二

因为函数String & String::operate =(const String &other) 是要求的返回一个引用
所以这里用*this
zhousqy 2005-01-19
  • 打赏
  • 举报
回复
原来说错了。哎、误人子弟。BS自己阿。
goodluckyxl 2005-01-19
  • 打赏
  • 举报
回复
if(this == &other)//问题一
this 是编译器自己秘密置入的当前对象指针
other是对象类型 == 没有重载不同类型比较方式
所以比较类型要匹配对应
意思是 other对象是否就是本身对象


int &n=i;
n是i的引用
那&n是什么意思?
//是n表示为i的一个别名,引用i内容,操作n相当于操作i

return *this;//问题二
表示返回对象或者对象的引用即地址
return this //表示返回指针类型
两者有区别

Rodge 2005-01-19
  • 打赏
  • 举报
回复
1,判断this和other所指的空间是不是同一看区域
2,&n是取n所指空间的地址
3,*this 是this所指空间里的内容
this是所指空间的地址
zhousqy 2005-01-19
  • 打赏
  • 举报
回复
this指针指向本对象的引用。
&n是取n的地址、其中n是i的引用。
问题二同理。
liem 2005-01-19
  • 打赏
  • 举报
回复
if(this == &other)//问题一
这个是什么意思?
为什么不取this == other
int &n=i;
n是i的引用
那&n是什么意思?
=========
other是引用参数,不是指针,而this是对象本身指针,因此要将this与other地址(&other)比较,this与other不能直接比较
引用是别名,因此&n就是&i

return *this;//问题二
为什么要返回*this?return this是什么意思?
为什么要加个*?
*this什么含义?和this的区别是什么?
=====================
operator=是返回引用的,return *this就是返回对象本身(*this),而return this是返回对象的指针。

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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