class Triangular_iterator
{
public:
//为了不要在每次访问元素的时候都执行-1操作
//此处将_index的值设为index-1(就是贴合数组的逻辑次序)
Triangular_iterator(int index):_index(index-1){}
bool operator==(const Triagnular_iterator&)const;
bool operator!=(const Triangular_iterator&)const;
int operator*()const;
Triangular_iterator& operator++(); //前置版
Triangular_iterator operator++(int);//后置版
//运算符重载
private:
void check_integrity()const;
int _index;
//如果两个Triangular_iterator对象的索引值(_index)相等
//这两个对象相等
inline bool Triangular_iterator::
operator==(const Triangular_iterator &rhs)const
{
return _index==rhs._index
}
//重载运算符后,可以直接用于类对象
if(trian1==trian2)//...
//如果想将重载后的运算符作用于指针所指的类对象
//要先提领该指针,取出其所指对象
if(*ptri1==*ptri2)//...
//重载!=运算符
inline bool Triangular_iterator::
operator!=(const Triangular_iteragor &rhs) const
{
return !(*this==rhs);
}
//重载运算符的运算符函数定义方式
inline int operator*(const Triangular_iterator)
{
rhs.check_integrity();
//如是一个非成员函数,就没有访问私有成员的权利
return Triangular::_elems[_index];
}
非成员运算符的参表中,会比成员函数形式定义的运算符多出一个参数,即this指针(该this指针隐式代表左操作数)。
//递增运算符(++)的前置版本的重载
inline Triangular_iterator& Triangular_iterator::
operator++()
{
//前置版本
++_index;
check_integrity();
return *this;
}
//递增运算符(++)的后置版本的重载
inline Triangular_iterator Triangular_iterator::
operator++( int )
{
//后置版本
Triangular_iterator tmp = *this;
++_Index;
check_integrity();
return tmp;
}
typedef可以为某个类型设定另一个不同的名称。
通用形式:typedef 内置类型/复合类型/class类型 new_name;
typedef Triangular_iterator iterator;
iterator it=trian.begin();//错误
Triangular::iterator it=trian.begin();//正确
Fibonacci::iterator ift=fib.begin();
Pell::iterator pit=pel.begin();
vector<int>::iterator vit=_elems.begin();
string::iterator sit=file_name.begin();