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

时间:2015-10-25 12:01:28

标签: c++ class compare

如何在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函数中做什么?

2 个答案:

答案 0 :(得分: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..
}

答案 1 :(得分: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_cast是必要的,因为您的getMonthNumbergetDay访问者未被声明为const - 如果他们不修改month,他们可能应该这样做}和day

现在,您可以使用内置运算符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);
}