您的位置:首页 > 编程语言 > C语言/C++

C++primer学习:重载运算(2)

2015-10-26 16:24 429 查看

关系重载运算符

bool operator!=(const StrVec& lhs, const StrVec& rhs)
{
return !(lhs == rhs);
}
bool operator==(const StrVec& lhs, const StrVec& rhs)
{
return(lhs.size() == rhs.size() && equal(lhs.elements, lhs.first_free, rhs.elements));
}
bool operator<(const StrVec& lhs, const StrVec& rhs)
{
return(lexicographical_compare(lhs.begin(),lhs.end(),rhs.begin(),rhs.end()));
}
bool operator>(const StrVec& lhs, const StrVec& rhs)
{
return rhs<lhs;
}
bool operator<=(const StrVec& lhs, const StrVec& rhs)
{
return !(lhs>rhs);
}
bool operator>=(const StrVec& lhs, const StrVec& rhs)
{
return !(lhs<rhs);
}


下标运算,定义const与非const版本

const string&  operator[](size_t n)const{ return elements
; }
string& operator[](size_t n){ return elements
; }


为StrBlobPtr添加递增和递减运算,注意检查边界.

StrBlobPtr& operator++();//前置递增
StrBlobPtr& operator--();
StrBlobPtr operator++(int){ auto ret = *this;  ++*this; return ret; }
StrBlobPtr operator--(int){ auto ret = *this;  --*this; return ret; }
StrBlobPtr& StrBlobPtr:: operator++()
{
check(curr, "increment past the end of StrBlobPtr");
++curr;
return *this;
}
StrBlobPtr& StrBlobPtr:: operator--()
{
--curr;
check(curr, "increment past the end of StrBlobPtr");
return *this;
}


===========================================

为StrBlobPtr添加加法运算,实现指针应该有的算术运算.

friend StrBlobPtr operator+(const StrBlobPtr&, int);
friend StrBlobPtr operator+(int n,const StrBlobPtr& p){ return p + n; };
friend StrBlobPtr operator-(const StrBlobPtr& p, int n){ return p + (-n); };
friend int operator-(StrBlobPtr&, const StrBlobPtr&);
StrBlobPtr operator+(const StrBlobPtr& p, int n)
{
auto ret = p;
ret.curr += n;
p.check(ret.curr, "the curr out of range");
return ret;
}
int operator-(const StrBlobPtr& p1, StrBlobPtr& p2)
{
return p1.curr - p2.curr;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: