您的位置:首页 > 其它

友元

2016-05-01 19:49 309 查看
#include <iostream>

using namespace std;

const int sz = 20;

class Pointer;

class Holder
{
private:
int a[sz];
public:
void initialize();

friend class Pointer;
};

class Pointer
{
private:
Holder* h;
int* p;
public:
void initialize(Holder* h);
void next();  // 指针指向下一个,
void previous();  // 指针的前一个
void top();  // 第一个将指针移动到第一个,
void end();  // 最后一个,
void set(int i);  // 修改指针所指向的数,
int read();  // 把指针所指向的数取出来,
};

void Holder::initialize()
{
memset(a, 0, sz*sizeof(int));
}

void Pointer::initialize(Holder* rv)
{
h = rv;
p = rv->a;
}

void Pointer::next()
{
if (p < &h->a[sz - 1]) p++;
}

void Pointer::previous()
{
if (p > &(h->a[0])) p--;
}

void Pointer::top()
{
p = &(h->a[0]);
}

void Pointer::end()
{
p = &(h->a[sz - 1]);
}

int Pointer::read()
{
return *p;
}

void Pointer::set(int i)
{
*p = i;
}

int main()
{
Holder h;
Pointer hp,hp2;

h.initialize();
hp.initialize(&h);
hp2.initialize(&h);
for (int i = 0; i < sz; i++)
{
hp.set(i);
hp.next();
}

hp.top();
hp2.end();
for (int i = 0; i < sz; i++)
{
cout << "hp = "<< hp.read()
<<" , hp2 = "<< hp2.read()
<< endl;
hp.next();
hp2.previous();
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: