【问题标题】:C++ Linked List - Constructor and Operator OverloadingC++ 链表 - 构造函数和运算符重载
【发布时间】:2016-07-21 03:49:45
【问题描述】:

我编写了一个航空公司预订系统,它运行一个链表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&)
{

}

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

任何正确方向的点都会很有帮助。

谢谢!

【问题讨论】:

  • 字典排序并不少见,你为什么不直接在网上搜索几个例子呢?也就是说,您的函数签名(运算符也是 C++ 中的函数)不合适。

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多