我正在尝试比较一个名为Persons for Quicksort的对象列表。该对象包含名字,姓氏,SSN和电话号码的字符串,以及一些有用的成员。
class Person
{
protected:
string firstname, lastname, social, birthday;
public:
Person(string, string, string, string); //store all values in strings for easy comparison and because no manipulation is necessary
~Person();
string Get(int type); //allows retrieval of protected members of object
void Print();
bool operator > (const Person& pivot) const;
//bool operator < (const Person &pivot);
};
我试图使用运算符重载来确定两个Person对象中哪一个更大。
bool Person::operator > (const Person& pivot) const
{
if(this->firstname > pivot.firstname)
return true;
if(this->firstname < pivot.firstname)
return false;
if(this->lastname > pivot.lastname)
return true;
if(this->lastname < pivot.lastname)
return false;
if(this->birthday > pivot.birthday)
return true;
if(this->birthday < pivot.birthday)
return false;
if(this->social > pivot.social)
return true;
if(this->social < pivot.social)
return false;
}
但是,这似乎根本不起作用,因为当我运行
时Person * B = new Person("1234", "Donny", "Smith", "123456780");
Person * pivot = new Person("9345", "John", "Phillip", "234598765");
if (B > pivot);
cout << "hooray\n";
if(pivot > B)
cout << "Not hooray\n";
执行两个if语句的内容。我很困惑,但这可能是一个非常愚蠢的错误。
答案 0 :(得分:0)
您将B和pivot声明为指针。所以,基本上,你正在比较指针。当你这样做时:
if (B > pivot)
您正在比较内存地址。要解决这个问题,请尝试:
if (*B > *pivot)
顺便说一下,从这句话中删除分号:
if (B > pivot); // <- here
答案 1 :(得分:0)
首先,正如Avi注意到的那样,if语句中有一个分号。
其次,您使用指针/动态内存实例化对象(在Java风格中):这是一个错误。实际上您要比较的是是指针,而不是对象强>
不必要时不要使用动态内存。使用局部变量:
Person B("1234", "Donny", "Smith", "123456780");
Person pivot("9345", "John", "Phillip", "234598765");
if (B > pivot)
std::cout << "hooray" << std::endl;
if(pivot > B)
std::cout << "Not hooray" << std::endl;
这种复杂的比较可以通过std::tie
和std::tuple
轻松实现,正如此主题所示:Implementing comparison operators via 'tuple' and 'tie', a good idea?