首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >运算符重载自赋值

运算符重载自赋值
EN

Stack Overflow用户
提问于 2019-04-16 19:31:45
回答 1查看 109关注 0票数 -6

谁能解释一下下面的功能。

  AddressBook& operator =(const AddressBook& bok);///add this two to your struct
    bool operator ==(const AddressBook& bok);///

/***************************************************************************************/
    ///anywhere outside main add this definitions

    bool AddressBook::operator ==(const AddressBook& bok)
    {
        return (firstname==bok.firstname&&lastname==bok.lastname&&addr==bok.addr&&phone==bok.phone);
    }

    AddressBook& AddressBook::operator=(const AddressBook& bok)
    {
        if(*this==bok)
            return *this;
        else
        {
            firstname=bok.firstname;
            lastname=bok.lastname;
            addr=bok.addr;
            phone=bok.phone;
        }
         return *this;
    }
EN

回答 1

Stack Overflow用户

发布于 2019-04-16 19:38:06

这里有两个函数。它们都重载了operators

在本例中,相等operator==的比较运算符将比较两个类型为AddressBook的对象。当两个addressbook对象在firstnamelastnameaddrphone中匹配时,它将返回true (即两个addressbook对象相等)。

赋值操作符将允许您将一个AddressBook对象分配给另一个对象,它将复制值。

if (*this = bok)
    return *this;

在这种情况下,检查是否将对象分配给它自己。在指向对象实例的类this中。在本例中,是=运算符的左侧。如果它们相同(意味着它们在内存中的地址相同),则不会复制任何内容。

=运算符返回赋值。这就是为什么像这样的东西

a = b = 7;

是有效的。b = 7将7赋值给b。运算符返回值7。然后将返回值7赋值给a。该运算的返回值被丢弃。

这也是为什么像这样的事情

int a = 5, b = 7;
if(a = b) // assignment, not comparison!
{ /*Do things*/ }

是有效的。将b的值赋给a,然后将赋值操作的返回( b的值,7)用作条件,条件的计算结果为true。即使你真的想要这样的东西,它也是不好的风格,应该写成两行。

C和c++中的所有运算符都是函数调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55707166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档