我在学习C ++的LearnCpp.com章节中一直很缓慢但很确定。在区分指针与引用变量方面,我一直挥之不去。
这里是一个例子:
[代码]
Fraction& Fraction::operator= (const Fraction &fraction)
{
// self-assignment guard
if (this == &fraction)
return *this;
// do the copy
m_numerator = fraction.m_numerator;
m_denominator = fraction.m_denominator;
// return the existing object so we can chain this operator
return *this;
}
[/ code]
因此此函数使operator =重载,它是将地址返回到小数还是对小数的引用?
通过在函数末尾返回* this,是否表示它是地址?另外,我认为“ * this”是取消引用,将导致指向实际数据。那么它返回一个地址还是指向的实际数据?
最后,在“自我分配保护” if语句(this ==&fraction)中,我总是将参数列表中的“&”读为对变量的“引用”。但是该语句会将其与指针变量“ this”进行比较。那么它是指针(“&fraction”)还是地址?在函数的正文中包含“&”是否表示所指向的数据?
请澄清这些问题。确实对我有很大帮助。谢谢。
院长。
答案 0 :(得分:0)
因此此函数使operator =重载,它是将地址返回到小数还是对小数的引用?
它返回对Fraction
的引用。函数(或运算符)的开头应该是返回类型(暂时忽略template
s)。在这里我们可以看到Fraction&
,它是对Fraction
的引用。
通过在函数末尾返回* this,是否表示它是一个地址?
返回*this
表示函数正在返回this
指针所指向的内容。它实际上是 this 对象。考虑到返回类型是 reference 的事实,操作员将返回对该此对象的引用。它不返回任何地址。
我总是在参数列表中将“&”读为对变量的“引用”
您真的不应该。 &
与变量(不是 types )结合使用是地址运算符。在这种情况下:
if (this == &fraction)
它检查该对象(由this
指针指向的那个对象)是否与作为fraction
参数传递给函数的对象相同。 fraction
是一个引用,这意味着其地址将与引用绑定到的对象的地址相同。这样会有效地检查是否尝试向其自身分配对象(鉴于此代码是在赋值运算符中执行的)。