STL源码剖析学习之increment、decrement、dereference实现源码
来源:互联网 发布:c语言课程设计贪吃蛇 编辑:程序博客网 时间:2024/05/20 21:42
//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实现原理、操作符(++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源码剖析学习之increment、decrement、dereference实现源码
- STL源码剖析-increment/decrement/dereference操作符
- increment/decrement/dereference操作符
- increment/decrement/dereference操作符
- 《STL源码剖析》之迭代器简单实现
- STL源码剖析学习之容器
- STL源码剖析学习之数值算法
- STL源码剖析学习之基本算法
- 《STL源码剖析》学习之traits编程
- 《STL源码剖析》学习之迭代器
- C++ increment/decrement/dereference 操作符典型写法
- 《STL源码剖析》学习备忘
- 《STL源码剖析》学习--traits
- 《STL源码剖析学习笔记》
- 《STL源码剖析》学习笔记
- STL之Vector源码剖析
- STL之list源码剖析
- STL之deque源码剖析
- OpenGL---点、直线、多边形与几个函数小记
- 11.2.0.3 RAC IO问题
- Google Code项目代码托管网站上Git版本控制系统使用简明教程
- 大话设计模式之面向对象基础
- 论设计模式在软件开发中的应用
- STL源码剖析学习之increment、decrement、dereference实现源码
- 【首发】LongPathTool 长路径文件删除工具,解决源路径太长,源文件名长度大于文件系统支持的长度问题
- STL源码剖析学习之function call操作符(operator())
- 精简Android系统,删除自带软件对照表
- ibatis模糊查询(like)
- STL源码剖析学习之容器
- 状态模式学习
- ABAP中的CHECK,EXIT,RETURN,LEAVE PROGRAM.
- android模拟器快捷键