gpt4 book ai didi

C++ - 按字母顺序排列字符串 - '<' 运算符重载

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:16 25 4
gpt4 key购买 nike

对于初学者来说,这是家庭作业,我很清楚我应该做什么,但我显然遗漏了一些东西。

我目前有一个名为“Person”的抽象基类。我有 3 个继承人员的类(class),他们是教职员工、教职员工和学生。

我正在尝试按姓氏组织所有“人”的名字。所以我必须重载“<”运算符。

我已经编写了函数,但我不知道将它放在哪里。

功能:

bool operator < ( const Faculty &right )
{
if( getLastName() >= right.getLastName() == 0 )
return true;
return false;
}

我应该将它放在所有派生类的头文件中,还是应该将它作为虚函数放在基类 Person 中?或者我应该两者都做。目前我正在同时执行这两项操作,但每个文件都出现错误。

错误:

error C2662: 'Person::getLastName' : cannot convert 'this' pointer from 

更新:我已将我的功能更改为:

    bool operator < ( const Person &right )
{
return LastName >= right.getLastName();
}

在听取了其他人的建议后,我只把这个功能放在了“Person”中,并使其不虚化。然而,我仍然收到 5 个完全相同的错误,它们都指向此函数。

错误:

'Person::getLastName' : cannot convert 'this' pointer from 'const Person' to 'Person &'

如果它对任何人都有帮助,这里是我的“Person.h”的代码:

class Person
{
private:
string FirstName,
LastName,
MiddleName,
SSN;

string FullName;

public:
Person();
Person(string, string, string, string);
Person(string);

string getFirstName();
string getLastName();
string getMiddleName();
string getSSN();
string getFullName();

void setFirstName(string);
void setLastName(string);
void setMiddleName(string);
void setSSN(string);
void setFullName(string);

virtual string getIdentity()
{
return FirstName + " " + MiddleName + " " + LastName + " " + SSN;
}

bool operator < ( const Person &right )
{
return LastName >= right.getLastName();
}

virtual string getPurpose() = 0;

};

最佳答案

首先,您希望它适用于所有人,所以您应该将它放在 Person 中。你想比较任意两个人,所以 RHS 应该是人。

此外,您的逻辑是双重否定。我不确定你为什么要这样做,什么时候......

bool operator < ( const Person &right )
{
return getLastName() < right.getLastName();
}

... 更有意义。

关于C++ - 按字母顺序排列字符串 - '<' 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4362354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com