C ++链表 - 构造函数和运算符重载

时间:2016-04-01 11:00:06

标签: c++ constructor linked-list operator-overloading

我编写了一个使用链接列表list<Passenger> flight list运行的航空公司预订系统。

我认为我所写的功能应该有效,但我无法测试它们,因为我无法让我的乘客上班。

(适用database.h)

class Passenger
{
public:
    Passenger(string, string, string);
    ~Passenger();
    Passenger operator==(const Passenger&) const;
    Passenger operator<(const Passenger&) const;
    void read_from_file(list<Passenger>&, string);
    void insert(list<Passenger>&, string, string, string);
    void remove(list<Passenger>&, string, string, string);
    bool check_reservation(list<Passenger>&, string, string);
    void display_list(list<Passenger>&);
    void save_to_file(list<Passenger>&, string, string, string);

private:
    string fname;
    string lname;
    string destination;
};

(适用database.cc)

Passenger::Passenger(string first, string last, string dest)
{
     fname = first;
     lname = last;
     destination = dest;
}

Passenger::~Passenger()
{

}

Passenger Passenger::operator==(const Passenger&)
{

}

Passenger Passenger::operator<(const Passenger&)
{

}

应该重载运算符,以便比较名字和姓氏,以便按姓氏按字典顺序对列表进行排序。

正确方向的任何一点都会非常有帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

问题是运营商超载的结果:

Passenger operator==(const Passenger&) const;
Passenger operator<(const Passenger&) const;

比较应该返回bool,而不是Passenger。所以尝试:

bool operator==(const Passenger&) const;
bool operator<(const Passenger&) const;

例如,具有以下实现:

// and don't forget the trailng const to match the signature !
bool Passenger::operator==(const Passenger& p) const
{
    return fname==p.fname && lname==p.lname; 
}

bool Passenger::operator<(const Passenger& p) const
{
    return fname<p.fname || (fname==p.fname && lname<p.lname); 
}

这里是online demo