public、protected和private

很形象的一个说明,留着~~

转自http://blog.sina.com.cn/s/blog_4a1f4666010096ur.html   


说到public、protected和private三个修饰符,刚学C++时,被教教材上的那个表搞得晕晕忽忽的。曾几时为了考试还去背过那个表,现在想想真是哭笑不得。后来用得多了,就发现其实就是很简单的道理。

    我们可以把一个类看作是一个人,类的数据成员看作是财产,而类的成员函数看作是对于财产的使用(包括花钱和挣钱)。

    如果这个人很担心别人使用自己的财产,那就将其据为私有(private),这样只有自己才可以使用私有财产,就连自己的子孙也无缘享用;不管是儿子以何种方式继承的,都是幌子,老子什么也没给你留。

    如果这个人还算大方点,有了将财产与子孙共享的想法,就将其保护(protected)起来,当然想法归想法,那还得看子孙们愿意不愿意继承这份财产了(一般是愿意的),如果儿子想独吞,即不想让财产再向自己的下一代传承,那他就将这部分保护的财产私有(private)继承下来,倘若儿子还想将其传承到自己的下一带甚至更远的子孙,那就保护(protected)继承或者公有(public)继承下来,这时的公有继承其实是个幌子,说的好听,但财产都保护起来了,公有继承和保护继承一个样,反正外人用不上;

    如果这个人很大方,我的就是大家的,那就干脆财产宣布公有(public),这样自己可以用,外人也可以用,当然儿子也可以用。但是这终归是老子的想法,儿子没法管老子,但儿子如果小心眼儿,不想让别人甚至是自己的子孙从自己这里享用(私用继承),或者只想让自己子孙从自己这里拿钱享用(保护继承),当然这只是儿子小心眼罢了,其实财产不能从他这里拿出,从他父亲那里照样可以拿得出。如果儿子想通了,干脆也公有继承下来,这样就像他父亲那样慷慨了。

    当然,以上所说的享用财产还有另一层意思,那就是使用后的情况,也就是说财产有进有出,和别人共享当然有挣有赔,不是说私有了就一定能赚大钱,而或许公有了挣得更多,只是说和别人共享后,就不是那么安全了!另外,如果管这个男人的人(一般是他老婆)很会打理,财产经过估量后,分情况对待,某些财产可以和别人一起使用,一起收益(public);某些财产是给子孙留的,只有自己和子孙一起使用,一起收益(protected);还有一部分财产是老两口子养老用的,自己使用(private)。至于儿子们是怎么继承的,那就看儿媳妇了,呵呵。其实程序员扮演的就是这里的老婆以及儿媳妇的角色。

    当然这个人使用财产的方式也是类似的情况,可以和别人共享,也可以不是;可以传承,也可以不是。

    总之,想和别人以及子孙共享,就公有;想和子孙共享,就保护;想自己使用,就私有。至于继承方式,那就看儿子的想法了,儿子能继承的部分也只有公有的和保护的,公有的那部分就完全教给儿子自己处理了,儿子想和别人以及子孙共享,就公有继承;想和子孙共享,就保护继承;想自己使用,就私有继承。继承的保护财产,儿子就没那么大的权利了,最多也就只能和自己的儿子共享(保护继承或公有继承),或者干脆自己使用(私有继承)。

注:这里所描述的是C++/C的情况。


 1、C++中的继承方式有:
  public、private、protected三种(它们直接影响到派生类的成员、及其对象对基类成员访问的规则)。
  (1)public(公有继承):继承时保持基类中各成员属性不变,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。
  (2)private(私有继承):继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。 
  (3)protected(保护性继承):继承时基类中各成员属性均变为protected,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值