c++ 、java 、 oc 对象模型比较(干货)
来源:互联网 发布:看图识番号软件下载 编辑:程序博客网 时间:2024/06/03 12:56
最近突然想起对oc的对象模型比较清楚,那么c++、java怎样实现的呢?
参考文献:
- http://www.cnblogs.com/skynet/p/3343726.html 吴秦(Tyler)c++对象模型
- http://blog.csdn.net/jamesmf/article/details/7710149
- 深入理解java虚拟机
1. 先来易理解的,泛型的实现?
c++的泛型,采用编译期处理,添加对应的函数名+参数名,运行期直接调用;
java 泛型,是伪泛型,采用编译期类型检查等,JVM实际加载class的时候,采用类型擦除(生成的class文件中为数据的原始类型)
oc无
2.单继承
c++继承(较复杂,类似表驱动模型),这里先假定为简单的单继承,无覆盖,无多继承,无虚继承。
基本模型:虚函数表指针+非静态数据内存单元(连续)
无覆盖: 基类不受影响 直接扩充子类的虚函数表(先父类,后子类虚函数)
java 继承 待续
oc 继承,oc实际模型为一个结构体,包括class对象和meta Class(貌似有些跟java相似),每个对象均含有 superclass和isa指针,分别指向父类class地址和对象指针
3 重载(静态绑定)
几个实现差不多
1.c++ 编译器函数名+参数类型
2.java 静态分配,依赖静态类型
3.oc也差不多,类名+函数名+。。。
4 动态绑定(运行时)
c++虚函数表,较复杂
覆盖单继承:基类:本身 子类:父类虚函数(被覆盖的方法用子类方法替换)+无覆盖的子类虚函数
覆盖多继承:子类:二维表 父类1虚函数(被覆盖的方法用子类方法替换)+无覆盖的子类虚函数,其余 只列举父类虚函数表
oc
struct _class_t {
struct _class_t *isa;
struct _class_t *superclass;
void *cache;
void *vtable;
struct _class_ro_t *ro;
};
vtable可见也是虚函数表+cache表java invokevirtural解析 (还是建立虚表+接口方法表)
在oc和java中实现多继承采用接口
待续。。。。
- c++ 、java 、 oc 对象模型比较(干货)
- oc对象模型理解
- java 和 oc 比较
- iOS-OC对象模型
- 【Objective-C】05-OC对象中类方法和对象方法的比较
- 【C语言】02-C语言字符串长度和OC字符串对象长度计算的比较
- OC和C语言比较
- Java中对象比较(第三个代码模型)
- C功底挑战Java菜鸟入门概念干货(一)
- C功底挑战Java菜鸟入门概念干货(二)
- C功底挑战Java菜鸟入门概念干货(三)
- OC--对象模型与运行时
- Objective-C对象模型
- Objective-C对象模型
- objective C 对象模型
- C ++ 对象模型
- Objective-C 对象模型
- 【C++】对象模型
- 生成随机数, random 5, random 7
- 利用Python对二进制数据进行按位处理
- 10个超棒的界面设计工具
- MyEclipse2014安装包下载地址、破解文件及破解方法
- 11 个超棒的移动Web应用开发解决方案
- c++ 、java 、 oc 对象模型比较(干货)
- BST && TREAP 实现简单排序
- AutoLayout
- HTML5移动前端框架:Junior
- 使用Struts2+JavaScript+Ajax实现成绩录入功能
- HTML5 开源前端框架 Amaze UI 发布 1.0 正式版
- Ubuntu 下安裝 GTK
- 15个最好的HTML5前端响应式框架(2014)
- (八)喜马拉雅Demo引出的细节(代理模式和图片缩放)