参考C++编程思想学了一些
此处是学习的代码
#include
#include
#include
using namespace std;
#define SZ 20
struct holder
{
private:
int a[SZ];
public:
void initialize();
struct pointer {
private:
holder* h;
int* p;
public:
void initialize(holder* H);
void next();
void previous();
void top();
void end();
int read();
void set(int i);
};
friend holder::pointer;//友元结构体,先进行定义了,若没有定义,则相当于对它的声明,若变量中含有还未定义的结构则一定要在前面声明
};
void holder::initialize()
{
memset(a, 0, SZ * sizeof(int));
}
void holder::pointer::initialize(holder* H)
{
h = H;
p = h->a;
}
void holder::pointer::next()
{
if (p < &(h->a[SZ - 1])) p++;
}
void holder::pointer::previous()
{
if (p > & (h->a[0])) p--;
}
void holder::pointer::top()
{
p = &(h->a[0]);
}
void holder::pointer::end()
{
p=& (h->a[SZ - 1]);
}
int holder::pointer::read()
{
return *p;
}
void holder::pointer::set(int i)
{
*p = i;
}
int main()
{
holder h;
holder::pointer hp, hp2;//一定要这么写不然是找不到的
int i;
h.initialize();
hp.initialize(&h);
hp2.initialize(&h);
for (i = 0; i < SZ; i++)
{
hp.set(i);
hp.next();
}
hp.top();
hp2.end();
for (i = 0; i < SZ; i++)
{
cout << hp.read() << " " << hp2.read() << endl;
hp.next();
hp2.previous();
}
//cout << h.a[0] << endl; 一样不可访问
}