好我有结构:
struct birthdayPerson
{
int day, month, year;
public:
void Show()
{
std::cout << day << " " << month << " " << year << std::endl;
}
};
然后,我想重载“ ==”,以便如果这些人的生日(日期和月份)相同,则可以比较2个已声明的结构。我有这个结构的2元素数组指针:
birthdayPerson * personBirth[2];
personBirth[0] = new birthdayPerson;
personBirth[1] = new birthdayPerson;
然后我像这样超载:
bool operator==(birthdayPerson person1, birthdayPerson person2)
{
return (person1.day == person2.day &&
person1.month == person2.month);
}
最后我在代码中使用:
bool sameBirthDay = personBirth[0] == personBirth[1];
但是,为什么它不调用“ overladed”函数(运算符)?我在做什么worong?
personBirth
是BirthdayPerson*
的数组。您需要取消引用指针以比较它们所指向的对象:
bool sameBirthDay = *personBirth[0] == *personBirth[1];
首先,您的operator==
应该通过const引用获取其参数:
bool operator==(const birthdayPerson &person1, const birthdayPerson &person2)
第二,您的数组包含birthdayPerson*
指针,而不是实际的birthdayPerson
对象。您的语句bool sameBirthDay = personBirth[0] == personBirth[1];
正在比较指针,这就是为什么不调用您的运算符的原因。您需要引用指针以正确调用您的运算符:
bool sameBirthDay = *(personBirth[0]) == *(personBirth[1]);