使用if else进行对象比较 | 运算符重载

3

我需要根据以下不同的标准来比较(>,<,==)两个类对象

class Student
{
    int iRollNumber;
    int iSection;
    int iMarks;
}
  1. 我想独立地比较iRollNumber、iSection、iMarks
  2. 我想合并比较iRollNumber、iSection
  3. 我想合并比较iMarks、iSection
  4. ..........

目前,我使用GetMethods()实现此操作,并使用if elseif elseif..结构进行比较。

这导致代码到处都很混乱!

如果我使用运算符重载,我必须决定一种比较方式。

请建议一种优雅的编码方式来实现它。

或者

是否可以通过多态调用运算符重载?


1
什么是 RoolNumber?:P. 应该是 RollNumber :D - Nawaz
那是你的问题(使用getter方法(不好的面向对象编程))。 - Martin York
你想做什么?也许一些辅助函数(或lambda)与STL算法或容器结合起来就足够了,但除非你说出你想要使用比较的目的,否则无法确定。 - Kerrek SB
1个回答

7

编写具名函数:

int CompareR( const Student & a, const Student & b );
int CompareS( const Student & a, const Student & b );
int CompareM( const Student & a, const Student & b );
int CompareRS( const Student & a, const Student & b );
int CompareMS( const Student & a, const Student & b );

尽管需要在类上进行许多不同类型的比较有点不寻常 - 通常只需要一个或两个。这些函数应该返回与strcmp()相同类型的值:

<  returns -1
== returns 0
>  returns 1

@Neil:不要想得太超出常规,否则你的大脑会崩溃的 :P .... (顺便点个赞 :D)。 - Nawaz
1
@Nawaz 我认为你在这个问题上已经无法更深入了!除了使用引用之外,它甚至都不是“真正的”C ++。 - user2100815
为什么不效仿C++,只定义一个做少于比较的布尔函数(有多种方式)。其他变体可以轻松地基于此定义。 - Martin York
@Martin 因为你确实需要定义它们 - 这是更多的工作,更多的代码。这就是C++的做法 - 你用过std::string::compare吗? - user2100815

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接