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中试试
//学习目的: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中试试
相关文章推荐
- C++ Standard Stl -- SGI STL源码学习笔记(06) stl_vector 与 一些问题的细化 2 push_back函数剖析
- (一)stl源码剖析学习,遗留问题在3.7
- STL源码剖析学习笔记之具备次配置力(sub-allocation)的SGI空间配置器
- STL学习_SGI二级空间配置器源码剖析
- STL 源码剖析 deque实现源码
- STL学习笔记之容器--deque(二)源码剖析
- STL学习笔记之容器--vector(二)源码剖析
- STL源码剖析学习十七:算法之其他算法
- STL学习笔记之容器--list(二)源码剖析
- STL中的空间配置器allocator的实现原理及源码剖析
- Struts2学习(第八篇)——拦截器的实现原理及源码剖析
- STL源码剖析学习十二:算法之数值算法
- C++ Standard Stl -- SGI STL源码学习笔记(07) stl_vector 与 一些问题的细化 3 resize函数剖析
- STL学习笔记之迭代器--iterator(源码剖析)
- 决策树学习(下)——ID3、C4.5、CART深度剖析及源码实现
- STL源码剖析学习原因案例解析(二)
- STL源码剖析学习四:vector
- STL源码剖析学习五:list
- 决策树学习(上)——深度原理剖析及源码实现
- STL源码学习笔记(1):stack及自定义实现