任何人都可以解释以下功能。
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;
}
答案 0 :(得分:1)
这里有两个功能。它们都超载operators。
在这种情况下,相等性operator==
的比较运算符将比较类型为AddressBook
的两个对象。当它们在true
,firstname
,lastname
和addr
中匹配时,它将返回phone
(假设两个地址簿对象相等)。
赋值运算符将允许您将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*/ }
有效。为a
分配了b
的值,然后将赋值操作的返回值(b
的值7)用作条件,其结果为true。即使您确实想要这样的东西,也很糟糕,应该用两行写成。
c和c ++中的所有运算符都是函数调用。