您的位置:首页 > Web前端

STL源码剖析学习之increment、decrement、dereference实现源码

2013-02-15 09:37 399 查看
//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中试试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: