081-C++

来源:互联网 发布:selenium java 多线程 编辑:程序博客网 时间:2024/06/06 13:56

C++ 类成员访问运算符 -> 重载

#include <iostream>#include <vector>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 = 10;int Obj::j = 12;// 为上面的类实现一个容器class ObjContainer {   vector<Obj*> a;public:   void add(Obj* obj)   {       a.push_back(obj);  // 调用向量的标准方法   }   friend class SmartPointer;};// 实现智能指针,用于访问类 Obj 的成员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    {     if(!oc.a[index])     {        cout << "Zero value";        return (Obj*)0;     }     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;}