Hiding the Implementation(Chapter 5 of Thinking in C++)

Hiding the Implementation(Chapter 5 of Thinking in C++)Hiding the Implementation(Chapter 5 of Thinking in C++)NestFriend.cpp1#include<iostream>

2#include<cstring>

3usingnamespacestd;

4constintsz=20;

5

6structHolder

7{

8private:

9inta[sz];

10public:

11voidinitialize();

12structPointer;

13friend Pointer;

14structPointer

15{

16private:

17Holderh;

18int
p;

19public:

20voidinitialize(Holderh);

21voidnext();

22voidprevious();

23voidtop();

24voidend();

25intread();

26voidset(inti);

27};

28};

29

30voidHolder::initialize()

31{

32memset(a,0, sz
sizeof(int));

33}

34

35voidHolder::Pointer::initialize(Holderrv)

36{

37h=rv;

38p=rv->a;

39}

40

41voidHolder::Pointer::next()

42{

43if(p<&(h->a[sz-1]))

44{

45p++;

46}

47}

48

49voidHolder::Pointer::previous()

50{

51if(p>&(h->a[0]))

52{

53p--;

54}

55}

56voidHolder::Pointer::top()

57{

58p=&(h->a[0]);

59}

60

61voidHolder::Pointer::end()

62{

63p=&(h->a[sz-1]);

64}

65

66intHolder::Pointer::read()

67{

68return
p;

69}

70

71voidHolder::Pointer::set(inti)

72{

73*p=i;

74}

75

76intmain()

77{

78Holder h;

79Holder::Pointer hp, hp2;

80inti;

81

82h.initialize();

83hp.initialize(&h);

84hp2.initialize(&h);

85for(i=0; i<sz; i++)

86{

87hp.set(i);

88hp.next();

89}

90

91hp.top();

92hp2.end();

93for(i=0; i<sz; i++)

94{

95cout<<"hp ="<<hp.read()

96<<", hp2 ="<<hp2.read()<<endl;

97hp.next();

98hp2.previous();

99}

100

101cin.get();

102}

原文链接: https://www.cnblogs.com/zhtf2014/archive/2010/11/10/1874183.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/17191

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午5:43
下一篇 2023年2月7日 下午5:44

相关推荐