C++ Primer 学习笔记_61_重载操作符与转换 --自增/自减操作符(二)

2014-11-24 12:36:42 · 作者: · 浏览: 1
lhs.beg == rhs.beg && lhs.end == rhs.end && lhs.curr > rhs.curr; } inline bool operator<=(const CheckedPtr &lhs,const CheckedPtr &rhs) { return !(lhs > rhs); //OR: return lhs == rhs || lhs < rhs; } int &CheckedPtr::operator*() { if (curr == end) { throw out_of_range("Error Pointer!"); } return *curr; } const int &CheckedPtr::operator*() const { if (curr == end) { throw out_of_range("Error Pointer!"); } return *curr; } int &CheckedPtr::operator[](const size_t index) { if (beg + index >= end || beg + index < beg) { throw out_of_range("index: out_of_range!"); } return *(beg + index); } const int &CheckedPtr::operator[](const size_t index) const { if (beg + index >= end || beg + index < beg) { throw out_of_range("index: out_of_range!"); } return *(beg + index); } CheckedPtr &CheckedPtr::operator++() { if (curr == end) { throw out_of_range("increment past the end of CheckedPtr"); } ++ curr; return *this; } CheckedPtr &CheckedPtr::operator--() { if (curr == beg) { throw out_of_range("decrement past the beginning of CheckedPtr"); } -- curr; return *this; } CheckedPtr CheckedPtr::operator++(int) { CheckedPtr ret(*this); ++ *this; return ret; } CheckedPtr CheckedPtr::operator--(int) { CheckedPtr ret(*this); -- *this; return ret; } //测试 int main() { int ia[] = {10,8,6,4,2,0}; CheckedPtr flag(ia,ia + sizeof(ia)/sizeof(*ia)); for (CheckedPtr parr(ia,ia + sizeof(ia)/sizeof(*ia)); parr != flag + sizeof(ia)/sizeof(*ia); parr = parr + 2) { cout << *parr << endl; } for (CheckedPtr parr(ia,ia + sizeof(ia)/sizeof(*ia)); parr != flag + sizeof(ia)/sizeof(*ia); ++ parr) { cout << *parr << endl; } CheckedPtr parr1(ia,ia + sizeof(ia)/sizeof(*ia)); cout << endl << parr1[2] << endl; cout << *parr1 << endl; CheckedPtr parr2(ia,ia + sizeof(ia)/sizeof(*ia)); ++ parr2; cout << "parr1 <= parr2 " << (parr1 <= parr2) << endl; return 0; }