您的位置:首页 > 编程语言 > C语言/C++

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

2014-09-29 10:39 197 查看
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要纯净得多,真的纯净这个词很适合。你不需要考虑多继承、不要考虑成员的属性,子类基本可以继承父类所有东西,除非你可以隐藏,而对于每个对象来说,它也都只是处理自己的成员,总的来说,没有太多的穿插、交错的感觉,所以条理清楚,从而纯净。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: