C++ 链表 - 构造函数和运算符重载
C++ Linked List - Constructor and Operator Overloading
我编写了一个运行链表的航班预订系统list<Passenger> flight list
。
我认为我编写的函数应该可以工作,但我无法测试它们,因为我无法让我的乘客 class 正确。
(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&)
{
}
应重载运算符,以便比较名字和姓氏,并按姓氏的字典顺序对列表进行排序。
在正确方向上的任何一点都会很有帮助。
谢谢!
问题是你的运算符重载的签名:
Passenger operator==(const Passenger&) const;
Passenger operator<(const Passenger&) const;
比较应该 return 和 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
我编写了一个运行链表的航班预订系统list<Passenger> flight list
。
我认为我编写的函数应该可以工作,但我无法测试它们,因为我无法让我的乘客 class 正确。
(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&)
{
}
应重载运算符,以便比较名字和姓氏,并按姓氏的字典顺序对列表进行排序。
在正确方向上的任何一点都会很有帮助。
谢谢!
问题是你的运算符重载的签名:
Passenger operator==(const Passenger&) const;
Passenger operator<(const Passenger&) const;
比较应该 return 和 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