以c++的角度看OC中类成员和继承属性

  c++的类定义中,对于成员函数和成员变量都有访问权限的设定,包括private(私有)、public(共有) 和 protected(被保护的)3种。而子类继承父类的时候,也有同样3种继承属性,这会影响到父类的成员在子类中的 访问权限的更改。

   而在OC中,是没有这些关键词限定的,但是OC类也有自己的属性,所以可以把OC的类性质放到c++的角度里来分析下。

   首先,OC类的成员变量,在类定义的时候,声明的所有成员变量都是protected,并非私有。因为在子类中可以随意调用这些成员。真正私有的,是使用extension(扩展)定义的成员,它们只能在父类中使用。然后是使用属性(property)定义的成员变量,或者说定义了get\set方法的成员变量,性质是public;这是借了OC中方法几乎是共有的光,方法共有,然后通过共有方法修改成员,而因为get\set方法是专门做成员变量的取值赋值操作,而property又把它们合在了一起,可以看做它们是一体的,可以看成成员变量是属性是public。

   然后,对于方法成员,只要可以得到方法声明,就可以调用方法,可以说方法成员基本是protected。实现私有,可以使用category,将方法定义在.m文件中,就只能在父类的@implemention ......@end之间使用了,子类无法继承,在其他地方,父类的对象也无法调用。一般类封装公开的都是头文件,所以需要公开的方法就在头文件中声明,不需要公开的就在类别或扩展中声明,甚至不用声明,直接写实现。貌似对于方法成员,没有protected这个性质,即没有父类、子类可以调用,但是其他地方不能调用的方法。

  自我感觉,c++和OC相比,要繁琐许多,不是复杂。设计者貌似很在意效率问题,想尽一切办法来提高效率,增加了许多设定,比如模板类、比如引用(reference)、运算符的重载等等,相比而言,OC要纯净得多,真的纯净这个词很适合。你不需要考虑多继承、不要考虑成员的属性,子类基本可以继承父类所有东西,除非你可以隐藏,而对于每个对象来说,它也都只是处理自己的成员,总的来说,没有太多的穿插、交错的感觉,所以条理清楚,从而纯净。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值