友元
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; }
相关文章推荐
- laravel5分钟完成登录注册
- CentOS6.5安装Redis数据库
- 20145225《Java程序设计》 第9周学习总结
- 20145223 《Java程序程序设计》实验报告4
- 《啊哈算法》第五章 图的遍历
- 设计模式--单例模式与迭代器模式的思考
- 第九周学习进度条
- opensuse上使用zypper代替yum
- JVM加载机制
- java数组2
- tornado用户指引(四)------tornado协程使用和原理(三)
- 机房重构之报表
- 20145235 《Java程序设计》第9周学习总结
- Fragment 代码怎么写
- Fragment 代码怎么写
- jQuery对html元素取值与赋值
- cocoapods 如何正确的上传到SVN
- HDU 4707:Pet
- Python编码报错
- 20145215《Java程序设计》第9周学习总结