以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要纯净得多,真的纯净这个词很适合。你不需要考虑多继承、不要考虑成员的属性,子类基本可以继承父类所有东西,除非你可以隐藏,而对于每个对象来说,它也都只是处理自己的成员,总的来说,没有太多的穿插、交错的感觉,所以条理清楚,从而纯净。
而在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要纯净得多,真的纯净这个词很适合。你不需要考虑多继承、不要考虑成员的属性,子类基本可以继承父类所有东西,除非你可以隐藏,而对于每个对象来说,它也都只是处理自己的成员,总的来说,没有太多的穿插、交错的感觉,所以条理清楚,从而纯净。
相关文章推荐
- 2013级C++第12周(春)项目——成员的访问属性、多重继承【 第2部分 实践项目】
- C++继承时派生类的成员访问属性
- 2013级C++第12周(春)项目——成员的访问属性、多重继承 【项目2 - 教师兼干部类】
- C++学习之路—继承与派生(一):基本概念与基类成员的访问属性
- 2013级C++第12周(春)项目——成员的訪问属性、多重继承
- C++的继承操作---基类指针访问派生类问题---基类成员恢复访问属性问题
- C++基础(八)继承与派生——派生类成员的访问属性
- C++学习之成员函数的访问属性与继承属性对虚表构建的影响--个人理解
- C++继承时派生类的成员访问属性
- 2013级C++第12周(春)项目——成员的访问属性、多重继承
- 第05章 CORE C++_对象的创建和使用_继承_多态_析构_xxx_cast_友元_只读成员_静态成员_多重继承_虚继承_内部类
- C++基础:C++类成员属性的一种简洁实现
- C++继承体系下类中属性的能见度总结
- C++继承方式与成员访问规则
- 用代码的角度看C++虚函数、虚继承的影响
- C++和Java在 子类继承父类时,两者成员函数重写和重载的特性
- c++中继承 掩藏基类成员,访问父类对比c#
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- C++成员访问控制,以及C++继承方式对成员访问控制的影响
- 深入理解C++数据成员的继承