list.h
class Link {
public:
string value;
Link(const string& v, Link* p = 0, Link * s = 0):
value(v), prev(p), succ(s) {}
Link* insert(Link* n); // insert n before this object
Link* add(Link* n); // insert n after this object
Link* erase(); // remove this object from list
Link* find(const string& s); // find s in list
Link* const find(const string& s) const;
Link* advance(int n) ; // get the nth successor
Link* next() const { return succ; }
Link* previous() const { return prev; }
private:
Link* prev;
Link* succ;
};
Run Code Online (Sandbox Code Playgroud)
你能告诉我为什么我们需要两个版本的 find()
Link* find(const string& s); // find s in list
Link* const find(const string& s) const;
Run Code Online (Sandbox Code Playgroud)
在这个自制的双链表中,这两个版本之间的主要区别是什么?
您想要同一个成员函数const
的非const
版本和非版本的原因是您可以在const
非const
对象上调用它们:
Link link = ...;
link.find("hello"); // calls non-const find(), returns Link*
const Link clink = ...;
clink.find("goodbye"); // calls find() const
Run Code Online (Sandbox Code Playgroud)
虽然,您的const
版本返回Link* const
.那是一个const
指针Link
.返回const Link*
一个指向以下内容的指针会更有意义const Link
:
Link* find(const std::string& );
const Link* find(const std::string& ) const;
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您const
Link
仍然可以找到条目 - 只是不修改它们.这将保持const
- 性.只要你不修改它们就能在const集合中查找东西是有意义的.
归档时间: |
|
查看次数: |
239 次 |
最近记录: |