【ThinkingInC++】59、关于operator->
2014-09-25 19:18
453 查看
/** * 书本:【ThinkingInC++】 * 功能:关于operator-> * 时间:2014年9月25日19:22:01 * 作者:cutter_point */ #include <iostream> #include <vector> #include "../require.h" using namespace std; class Obj { static int i, j; public: void f() const {cout<<i++<<endl;} void g() const {cout<<j++<<endl;} }; int Obj::i=47; int Obj::j=11; //容器,包含Obj对象的类 class ObjContainer { vector<Obj*> a; //容器里面是关于Obj类的指针 public: void add(Obj* obj) {a.push_back(obj);} friend class SmartPointer; //为这个类声明友元类,方便后面访问a }; class SmartPointer { ObjContainer& oc; int index; public: SmartPointer(ObjContainer& objc) : oc(objc) {index=0;} //前缀加加 bool operator++() { if(index >= oc.a.size()) return false; if(oc.a[++index] == 0) return false; return true; } //后缀加加 bool operator++(int) { return operator++(); } Obj* operator->() const { require(oc.a[index] != 0, "Zero value returned by SmartPointer::operator->()"); return oc.a[index]; } }; int main() { const int sz=10; Obj o[sz]; ObjContainer oc; for(int i=0 ; i<sz ; ++i) oc.add(&o[i]); SmartPointer sp(oc); do { sp->f(); sp->g(); }while(sp++); return 0; }
相关文章推荐
- <<Thinking in C++>>读中感
- 为什么二进制文件与文本文件存入同样的数据,文件大小差异会这么大?(from <<Thinking in C++>>'s execise)
- <<Thinking in C++>> Edition2 Voloum1 读书笔记
- <kingofark关于学习C++和编程的50个观点> 详解 - 预览版
- 关于c->c++过渡的一些小细节
- <细节>c++中关于++和*的优先级
- 关于thinking in c++
- 【ThinkingInC++】20、关于C的习题(2)
- c++ arrow operator (->)
- C++关于std namespace与# include<iostream>关系的有关问题
- 【ThinkingInC++】21、关于C的习题(3)
- C++ 使用oci访问数据库出现“Column: 2<DOUBLE>, datatype in operator <</>>: CHAR”
- 关于C++ 学习的几点 理解 之 c++关键字详解(volatile,mutable,explicit,dynamic_cast<T>(expression))等
- 关于C++操作符重载之"->"和"*"
- C++语法基础--重载operator->箭头操作符
- <Thinking in Java>读书进度贴
- C++中重载间接运算符(operator->())
- c/c++ 关于变量重复定义 inet_addr it->s_str() == (*it).c_str()
- 【ThinkingInC++】47、关于宏的使用,探讨使用宏的缺点
- 【ThinkingInC++】19、关于C的习题(1)