第十四章 14.5节练习 & 14.6节练习

练习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版本的,就无法进行操作了,这反而会带来一些不方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值