A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯立柱 中级黑马   /  2015-1-13 12:37  /  1347 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在OC视频中,讲到继承时,当A类完全拥有B类中的部分属性和方法时可以考虑B类继承A类,但根据逻辑关系的不同,有时不使用继承,而使用组合,写做
A *_a;,谁能帮我解释下,A *_a;是什么意思,是创建了一个指针吗?在内存中是怎么表现的?为什么这么写呢?

6 个回复

倒序浏览
就是a属于b的意思吧,比如,我有一本书,书就不能继承人
回复 使用道具 举报
意思我知道,我只是不明白,为什么组合要写成这样A*_a;这是个指针吗?那他指向哪里;为什么指向那里,就能实现组合关系?
回复 使用道具 举报
我也不清楚这是为什么。
回复 使用道具 举报
A *_a 是声明一个类型为A的指针变量,就是在栈空间创建一个空间存这个指针(参加:int)当给对象a属性赋值时,就是把赋值对象的地址给a
回复 使用道具 举报
谢谢各位,我搞明白了。其实组合就是相当于将A类型的对象,作为B类的成员变量使用。在B类型中创建一个指针,指向A类型的对象。  应该是这个意思吧。
回复 使用道具 举报
在B类中写A *_a 是B类包含A类的一个指针引用,这样B就可以访问到A类当中的非私有的成员变量和函数。
而继承也是可以直接访问父类的非私有的成员变量和函数,不过继承可以重写父类的函数,但是耦合性就很高了,在开发当中要 遵循 多组合,少继承的原则。维护起来比较方便。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马