C++字母串-“
首先,这是家庭作业,我对我应该做什么有很好的理解,但我显然错过了一些东西 我目前有一个抽象基类,名为Person。我有三个班,分别是教职员工、教员和学生C++字母串-“,c++,string,operator-overloading,alphabetical,C++,String,Operator Overloading,Alphabetical,首先,这是家庭作业,我对我应该做什么有很好的理解,但我显然错过了一些东西 我目前有一个抽象基类,名为Person。我有三个班,分别是教职员工、教员和学生 我正试图按姓氏来组织所有人的名字。所以我必须让“超载,首先,你想让它对所有人都有效,所以你应该亲自去做。你想比较任何两个人,所以RHS应该是一个人 而且,你的逻辑是双重否定的。我不知道你为什么要这么做,当 bool operator < ( const Person &right ) { r
我正试图按姓氏来组织所有人的名字。所以我必须让“超载,首先,你想让它对所有人都有效,所以你应该亲自去做。你想比较任何两个人,所以RHS应该是一个人 而且,你的逻辑是双重否定的。我不知道你为什么要这么做,当
bool operator < ( const Person &right )
{
return getLastName() < right.getLastName();
}
。。。这更有意义。首先,你想让它适用于所有人,所以你应该亲自去做。你想比较任何两个人,所以RHS应该是一个人 而且,你的逻辑是双重否定的。我不知道你为什么要这么做,当
bool operator < ( const Person &right )
{
return getLastName() < right.getLastName();
}
。。。更有意义。您应该将它放在Person类中,如果您无法想象派生类需要更改顺序,那么它不需要是虚拟的。鉴于名字的排序似乎不会因不同类别的人而有所不同,虚拟的名字就不存在了 参数应该是const Person&,函数本身应该在{引入实现之前,或者-如果实现不一致,则在trailing;之前设置const put 编辑:我在下面添加了一个实现 注意事项:
运算符您应该将其放在Person类中,如果您无法想象派生类需要更改排序,则它不需要是虚拟的。给定名称的排序似乎不会因Person的不同分类而有所不同,因此不会指示虚拟 参数应该是const Person&,函数本身应该在{引入实现之前,或者-如果实现不一致,则在trailing;之前设置const put 编辑:我在下面添加了一个实现 注意事项:
运算符当您尝试调用常量对象上的运算符时,可能会发生错误。编译器不知道该运算符当您尝试调用常量对象上的运算符时,可能会发生错误。编译器不知道该运算符看起来您可能需要从以下位置添加或更改getter:
string getFirstName();
string getLastName();
string getMiddleName();
string getSSN();
string getFullName();
进入
这是因为给出错误的函数没有Person实例的可变版本,但是没有常量getter,因此它根本不能使用任何getter!看起来您可能需要添加或更改getter,从:
string getFirstName();
string getLastName();
string getMiddleName();
string getSSN();
string getFullName();
进入
这是因为提供错误的函数没有Person实例的可变版本,但是没有常量getter,因此它根本不能使用任何getter!您的错误输出被切断。请发布整个错误消息。错误与您的问题没有真正的关系:getLastName应该是常量成员函数。我猜getLastName是非常量的,因为operator@Steve杰索普:你不知道错误与常数有关,因为你看不到错误。你的链接只是暗示问题可能与常数有关。@robert:我的评论中解释过,有根据的猜测。我已经对我的问题添加了更新。你的错误输出被切断了。请发布整个错误消息。该错误与您的问题无关:getLastName应该是一个常量成员函数。我猜getLastName是非常量的,因为您的operator@Steve杰索普:你不知道这个错误与常数有关,因为你看不到这个错误。你的链接只是暗示了这个问题可能与const ness有关。@robert:根据我的评论,这是一个有根据的猜测。我已经对我的问题添加了更新。我更改了所有这些内容,并且我只是亲自将函数放入,但仍然有5个相同的错误指向同一行。错误1错误C2662:“Person::getLastName”:无法将“this”指针从“const Person”转换为“this”致“Person&@Johnny Whisman:您更新的代码没有显示此答案第二段中建议的常量。@Johnny:您还需要使所有未设置/修改成员变量的函数都为常量,这样它将保持一致并正常工作。为什么?因为如果您有一个常量Person&那么您只能调用常量成员这个人身上的函数…你需要调用GetLastName,所以它也必须是const。我更改了所有这些内容,我只是将函数放在了这个人身上,但仍然有5个相同的错误指向同一行。错误1错误C2662:“person::GetLastName”:无法将“this”指针从“const person”转换为“person&@Johnny Whisman:你r更新后的代码没有显示此答案第二段中建议的常量。@约翰尼:您还需要生成所有未设置/mo的函数
dify成员变量const,那么它将是一致的,并且可以正常工作。为什么?因为如果您有一个const Person,那么您只能对该Person调用const成员函数。。。你需要调用GetLastName,所以它也必须是const。我改变了所有的东西,我只是亲自把函数放进去,但仍然有5个相同的错误指向同一行。错误1错误C2662:“Person::getLastName”:无法将“this”指针从“const Person”转换为“Person&”-Johnny Whisman 0秒前编辑我更改了所有内容,我只是将函数亲自放入,但仍有5个相同的错误指向同一行。错误1错误C2662:“Person::getLastName”:无法将“this”指针从“const Person”转换为“Person&”-Johnny Whisman 0秒前编辑太糟糕了编译器无法推断constness。在我看来,有很多情况下它可以,包括这一个。太糟糕了,编译器没有推导常量。在我看来,有很多情况下,它可以,包括这一个。
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;
};
bool operator < ( const Person &right )
{
return getLastName() < right.getLastName();
}
bool operator<(const Person& right) const
{
return LastName < right.LastName ? true :
LastName > right.LastName ? false :
FirstName < right.FirstName ? true :
Firstname > right.FirstName ? false :
MiddleName < right.MiddleName ? true :
MiddleName > right.MiddleName ? false :
SSN < right.SSN; // assume SSN is guaranteed unique
}
bool operator<(const Person& right) const
{
return LastName < right.LastName ||
LastName == right.LastName &&
(FirstName < right.FirstName ||
Firstname == right.FirstName &&
(MiddleName < right.MiddleName ||
MiddleName == right.MiddleName &&
SSN < right.SSN)); // assume SSN is guaranteed unique
}
bool operator < ( const Faculty &right ) const {
...
}
string getFirstName();
string getLastName();
string getMiddleName();
string getSSN();
string getFullName();
string getFirstName() const;
string getLastName() const;
string getMiddleName() const;
string getSSN() const;
string getFullName() const;