Smart pointer (operator overload)
class obj
{
public:
void f()
{
cout<<i++<<endl;
}
void g()
{
cout<<j++<<endl;
}
private:
static int i, j;
};
int obj::i = 47;
int obj::j = 11;
//container
class obj_container
{
enum
{
sz = 100
};
obj* a[sz];
int index;
public:
obj_container()
{
index = 0;
memset(a, 0, sz*sizeof(obj*));
}
void add(obj* OBJ)
{
if (index>=sz)
{
return;
}
a[index++] = OBJ;
}
friend class sp;
};
//Iterator:
class sp
{
obj_container* oc;
int index;
public:
sp(obj_container* OC)
{
index = 0;
oc = OC;
}
//Return value indicates end of list:
int operator++()//Prefix
{
if (index >= oc->sz) return 0;
if (oc->a[++index] == 0) return 0;
return 1;
}
int operator++(int) //Postfix
{
return operator++();
}
obj* operator->() const
{
if(oc->a[index]) return oc->a[index];
static obj dummy;
return &dummy;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
const int sz = 10;
obj o[sz];
obj_container OC;
for (int i=0; i<sz; i++)
{
OC.add(&o[i]); //Fill it up
}
sp SP(&OC); //Create an iterator
do
{
SP->f(); //smart pointer calls
SP->g();
} while (SP++);
}
浙公网安备 33010602011771号