如何在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函数中做什么?
答案 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
是必要的,因为您的getMonthNumber
和getDay
访问者未被声明为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);
}