练习14.26
为你的StrBlob类、StrBlobPtr类、StrVec类和String类定义下标运算符。
解答:
std::vector<std::string>& StrBlob::operator[](std::size_t n){
return data[n];
}
const std::vector<std::string>& StrBlob::operator[](std::size_t n) const {
return data[n];
}
std::vector<std::string>& StrBlobPtr::operator[](std::size_t n){
return wptr[curr + n];
}
const std::vector<std::string>& StrBlobPtr::operator[](std::size_t n) const{
return wptr[curr + n];
}
std::string& StrVec::operator[](std::size_t n)
{ return elements[n]; }
const std::string& StrVec::operator[](std::size_t n) const
{ return elements[n]; }
char String::operator[](std::size_t n){
return p[n];
}
const char String::operator[](std::size_t n) const{
return p[n];
}
练习14.27
为你的StrBlobPtr类添加递增和递减运算符。
解答:
这个完全可以参考书上的实现。
练习14.28
为你的StrBlobPtr类添加法和递减法符,使其可以实现指针的算术运算(参见3.5.3节,第106页)。
解答:
StrBlobPtr& StrBlobPtr::operator+(std::size_t n){
check(curr,"some message");
curr += n;
return *this;
}
StrBlobPtr& StrBlobPtr::operator-(std::size_t n){
curr -= n;
<pre name="code" class="cpp"> check(curr,"some message");
return *this;}
练习14.29
为什么不定义const版本的递增和递减运算符?
解答:
因为我们可能需要对递增或递减后的对象进行操作,如果定义了const版本的,就无法进行操作了,这反而会带来一些不方便。