谁能解释一下下面的功能。
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;
}
发布于 2019-04-16 19:38:06
这里有两个函数。它们都重载了operators。
在本例中,相等operator==
的比较运算符将比较两个类型为AddressBook
的对象。当两个addressbook对象在firstname
、lastname
、addr
和phone
中匹配时,它将返回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++中的所有运算符都是函数调用。
https://stackoverflow.com/questions/55707166
复制相似问题