读书人

c++ 默认的 operator== (),该如何解决

发布时间: 2012-03-04 11:13:34 作者: rapoo

c++ 默认的 operator== ()
程序代码是这样的
class Author
{
public:
Author() { }
Author(const string str) { name = str;}
bool operator== (const Author& ar) const
{return name == ar.name;}

private:
string name;
list <Book> books;

ostream& printAuthor(ostream&) const;
friend ostream& operator < < (ostream& out,const Author& ar)
{return ar.printAuthor(out);}


};
---------------------------------------
list <Author> catalog[ 'Z '+1];
-----------------------------------
void includeBook()
{
Author autor;
Book book;

autor.name = getString( "Enter author 's name: ");
book.title = getString( "Enter the title of the book: ");


list <Author> ::iterator iter = find( catalog[autor.name[0]].begin(),
catalog[autor.name[0] ].end(), autor);

do_something(...)
.....
}
=====================================
我的问题是这样的, iter是浏览这段链表内与autor相同的节点, 然后返回iter;
在这个find函数中两个类对象是默认的operator== 吧, 这个对比是怎么比的?
因为author类中有一个链表, 这个是怎么比较是否相等的, 还是不比较这个?
如果比较的话, 原来中的链表肯定不是空的, 而这个新建的类中的链表却是空的, 我程序测试的时候, 还是相等了..

望知道的朋友给指点一下... 谢谢

[解决办法]
相等的原因在于在Author类中定义了:
bool operator== (const Author& ar) const
{return name == ar.name;}
注意了,find使用的是iterater::value_type的operator==,此时iterater::value_type就是Author,所以find其实是使用上述这个函数来判断的,它只比较了name的相等性。
要让find同时比较name和books,就要把上述这个用户自定义的operator==注释掉,让隐式默认的operator==起作用,才能达到你所希望的结果。

读书人网 >C++

热点推荐