C ++重载单个运算符,将2个结构作为指针传递

问题描述 投票:0回答:1

好我有结构:

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?

c++ pointers overloading structure operator-keyword
1个回答
2
投票

personBirthBirthdayPerson*的数组。您需要取消引用指针以比较它们所指向的对象:

bool sameBirthDay = *personBirth[0] == *personBirth[1];

0
投票

首先,您的operator==应该通过const引用获取其参数:

bool operator==(const birthdayPerson &person1, const birthdayPerson &person2)

第二,您的数组包含birthdayPerson* 指针,而不是实际的birthdayPerson 对象。您的语句bool sameBirthDay = personBirth[0] == personBirth[1];正在比较指针,这就是为什么不调用您的运算符的原因。您需要引用指针以正确调用您的运算符:

bool sameBirthDay = *(personBirth[0]) == *(personBirth[1]);

© www.soinside.com 2019 - 2024. All rights reserved.