This question already has answers here:
What are the basic rules and idioms for operator overloading?
                                
                                    (7个答案)
                                
                        
                                5年前关闭。
            
                    
// Overloaded assignment operator for CMessage objects
CMessage& operator=(const CMessage& aMess)
{
    if(this == &aMess) // Check addresses, if equal
    return *this; // return the 1st operand
    // Release memory for 1st operand
    delete[] pmessage;
    pmessage = new char[strlen(aMess.pmessage) + 1];
    // Copy 2nd operand string to 1st
    strcpy_s(this- > pmessage, strlen(aMess.pmessage)+1, aMess.pmessage);
    // Return a reference to 1st operand
    return *this;
}


当使用运算符重载时,该示例使用引用作为参数,在比较地址是否相等时,为什么在aMess上使用&,为什么不使用if(this == aMess)? &aMess是参考地址吗?

最佳答案

&aMess是参考地址吗?


是。

if(this == &aMess)用于通过比较它们的地址来检查它们是否是同一对象。

if(*this == aMess)用于通过比较它们的值来检查它们是否相等。


  为什么不使用if(this == aMess)?


if(this == aMess)没有意义,因为它们不是同一类型。

关于c++ - 使用引用地址的C++运算符重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23222466/

10-11 17:09