当前位置: 代码迷 >> 编程 >> STL之increment、decrement、dereference兑现源码
  详细解决方案

STL之increment、decrement、dereference兑现源码

热度:4048   发布时间:2013-02-26 00:00:00.0
STL之increment、decrement、dereference实现源码
//STL之increment、decrement、dereference实现源码
//学习目的:STL实现原理、操作符(++i,i++,*等操作符的重载)
//increment/dereference操作符在迭代器的实现上占有非常重要的地位,因为任何一个迭代器都必须实现出前进(increment,operation++)和取值(dereference,operation*)功能。
//本程序代码来源《STL源码剖析》
//VC6的friend机制搭配C++标准程序库,有bug
#include <cstdio>
#include <iostream>


class INT
{
friend ostream& operator<< (ostream& os, const INT& i);


public:
INT(int i) : m_i(i) {};


INT& operator++()
{
++(this->m_i); //随着class的不同,该行应该有不同的操作
return *this;
}


const INT operator++(int)
{
INT temp = *this;
++(*this);
return temp;
}


INT& operator--()
{
--(this->m_i); //随着class的不同,该行应该有不同的操作
return *this;
}


const INT operator--(int)
{
INT temp = *this;
--(*this);
return temp;
}


int& operator*() const
{
return (int&)m_i;
//以上转换操作告诉编译器,你确实要将const int转换为non-const value。
//如果没有这样明白地转型,有些编译器会给你警告,有些更严格的编译器会视为错误。
}


private:
int m_i;
};


ostream& operator<< (ostream& os, const INT& i)
{
os << '[' << i.m_i << ']';
return os;
}


int main()
{
INT I(5);
cout << I++;
cout << ++I;
cout << I--;
cout << --I;
cout << *I;

}

//这段代码摘自STL源码剖析,VC6中编不过,也不知道是不是书上写的VC6的bug问题引起的,等有时间从vs中试试