如何在cpp中比较两个类与void *

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

如何在cpp中比较两个类与void *。我比较日和月。我在compare_dayOfYear函数中可以做什么?

这是我的班级:

class DayOfYear
{

public:
    DayOfYear(int newMonth,int newDay);
    //Initializes the month and day to arguments.

    DayOfYear(int newMonth);
    //Initializes the date to the first of the given month.

    DayOfYear();
    //Initializes the date to January 1.

    // Accessors
    int getMonthNumber( );
    //Returns 1 for January, 2 for February, etc.
    int getDay( );

    // Mutators
    int setMonthNumber(int newMonth);
    //Set 1 for January, 2 for February, etc.
    int setDay(int newDay);

private:
    int month;
    int day;
};


bool compare_dayOfYear(const void * firstValue, const void * secondValue)
{
    //I compare day and month
    //What can I do here
}

如何在cpp中比较两个类与void *。我比较日和月。我在compare_dayOfYear函数中可以做什么?

c++ class compare
2个回答
1
投票

如果你确定你已经通过了DayOfYear对象,那么你可以投射void指针。

bool compare_dayOfYear(const void * firstValue, const void * secondValue)
{
  DayOfYear* firstDayOfYear = static_cast<DayOfYear*>(firstValue);
  DayOfYear* secondDayOfYear = static_cast<DayOfYear*>(secondValue);
  //compare..
}

0
投票

而不是你的compare_dayOfYear函数,你应该使用以下运算符重载...

bool operator==(DayOfYear const &lhs, DayOfYear const &rhs)
{
  return const_cast<DayOfYear &>(lhs).getMonthNumber() == 
    const_cast<DayOfYear &>(rhs).getMonthNumber() &&
      const_cast<DayOfYear &>(lhs).getDay() == const_cast<DayOfYear &>(rhs).getDay();
}

bool operator!=(DayOfYear const &lhs, DayOfYear const &rhs)
{
  return !(lhs == rhs);
}

const_casts是必要的,因为你的getMonthNumbergetDay访问者没有被宣布为const - 他们可能应该是如果他们不修改monthday

现在你可以使用内置运算符DayOfYear==比较两个!=实例...

DayOfYear a(2, 1), b(2, 1), c(3, 1);
assert(a == b);
assert(a != c);

如果你真的必须使用你的compare_dayOfYear函数那么它应该在运算符重载之上实现,如此...

bool compare_dayOfYear(const void * firstValue, const void * secondValue)
{
  return *static_cast<DayOfYear const*>(firstValue) ==
    *static_cast<DayOfYear const*>(secondValue);
}
© www.soinside.com 2019 - 2024. All rights reserved.