复合:一个类中有一个成员变量是另外一个类的对象。

比如我现在要制作一台电脑,电脑需要CPU,显示器,鼠标和键盘等。这些东西的研发都是很复杂的过程。如果现在有成型的CPU等组件,就可以直接用这些组件攒一台电脑。复合模式就是这样。

习题2

汽车安装发动机和4个轮胎。
        (1)定义三个类:汽车类。
        (2)定义发动机类,实例变量(品牌、价格)
        (3)定义轮胎类,实例变量(品牌、价格、安装位置)。方法:添加防滑链。
        (4)给汽车类添加一个实例变量发动机,添加一个数组(使用Tire * tires[4])管理汽车的4个轮胎。
        (5)汽车安装发动机和4个轮胎。

工程解析(@public 懒得写set get方法,主要看复合过程)

Engine.h

#import <Foundation/Foundation.h>@interface Engine : NSObject
{@publicNSString *_Brand;int _Price;
}
-(void)Run;
@end

Engine.m

#import "Engine.h"@implementation Engine
-(void)Run
{NSLog(@"发动机(品牌%@,价格%d)启动了",_Brand,_Price);
}
@end

Tire.h

#import <Foundation/Foundation.h>@interface Tire : NSObject
{@publicNSString *_Brand;int _Price;int _Location;
}
-(void)install;
-(void)Run;
@end

Tire.m

#import "Tire.h"@implementation Tire
-(void)install
{NSLog(@"在%d上安装防滑链",_Location);
}
-(void)Run
{NSLog(@"位置%d,品牌%@,价格%d的轮胎转动",_Location,_Brand,_Price);
}
@end

Car.h

#import <Foundation/Foundation.h>
#import "Engine.h"
#import "Tire.h"
@interface Car : NSObject
{@publicNSString *_Brand;int _Price;Engine *_engine;Tire *tires[4];
}
-(void)setEngine:(Engine *)Engine;
-(Engine *)Engine;
//因为是一个数组,set get 写法有变化
-(void)setTire:(Tire *)tire atIndex:(int)index;
-(Tire *)tireAtIndex:(int)index;
-(void)start;//汽车启动
@end

Car.m

#import "Car.h"@implementation Car-(void)setEngine:(Engine *)Engine
{_engine=Engine;
}
-(Engine *)Engine
{return _engine;
}
-(void)setTire:(Tire *)tire atIndex:(int)index
{tires[index]=tire;
}
-(Tire *)tireAtIndex:(int)index
{return tires[index];
}
-(void)start
{NSLog(@"汽车(品牌%@,价格%d)启动",_Brand,_Price);[_engine Run];for (int i=0; i<4; i++) {[tires[i] Run];[tires[i] install];}}
@end

main.m

#import <Foundation/Foundation.h>
#import "Car.h"
#import "Engine.h"
#import "Tire.h"
int main(int argc, const char * argv[]) {@autoreleasepool {Car *p=[[Car alloc]init];p->_Brand=@"Audi";p->_Price=600000;Engine *p1=[[Engine alloc]init];p1->_Brand=@"丰田4Y";p1->_Price=2000;Tire *tires[4];for (int i=0; i<4; i++) {tires[i]=[[Tire alloc]init];tires[i]->_Brand=@"固特异";tires[i]->_Price=500;tires[i]->_Location=i+1;[p setTire:tires[i] atIndex:i];}[p setEngine:p1];[p start];}return 0;
}

OC面向对象的三大特征(封装 继承 多态)习题2 复合相关推荐

  1. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  2. Python学习笔记④——类、面向对象的三大特征 [封装+继承+多态]

    ✅ Blogger Learns Python is for learning the "Deep Learning". 文章目录 一.面向对象编程的简介 二.类与对象 -- 基础 ...

  3. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  4. 三大特征 封装 继承 多态

    ''' 1.面向对象与面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 缺点:扩展性 ...

  5. 面向对象的四大特征 封装 继承 多态 抽象

    1.封装 广义: 类 方法 包 的定义本身就是一种封装 狭义: 在设计一个类的时候 将所有的属性设置为私有的 并对各个私有的属性设计相应的 存/取方法 来完成对属性的使用 私有化只能代表封装的特性 可 ...

  6. java的知识点11——面向对象的三大特征之一继承、instanceof 运算符、方法的重写override、Object类基本特性、toString方法

    面向对象的三大特征:继承.封装.多态 继承的实现 继承让我们更加容易实现类的扩展.子类是父类的扩展 使用extends实现继承 package cn.sxt;public class Test {pu ...

  7. Java面向对象三大特性(封装继承多态)解释及案例

    文章目录 包 包基本语法 命名规则 命名规范 导入包实例 访问修饰符 面向对象编程-封装 面向对象编程-继承 super关键词 super和this的比较 方法重写/覆盖 (override) 注意事 ...

  8. Python全栈开发——面向对象的三大特性(继承 多态 封装)

    1.继承 1.两层意思 改变和扩展(详细看随笔继承和组合) 2.多态(体现在运行时的状态) 1.不同的类可以调用相同的方法,得到不同的结果 2.实际上是继承的一种体现机制 class H2o:def ...

  9. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

最新文章

  1. python综合程序设计-Python程序设计实验五:综合运用三种基本结构进行程序设计...
  2. OCM备考 三. Managing Database Availability 之RMAN日常操作
  3. resnet50训练imagenet记录
  4. 信息学竞赛计算机基础知识,信息学奥赛-计算机基础知识.doc
  5. SSH框架整合——基于XML配置文件
  6. 一个好用的小工具 thefuck
  7. Docker的核心概念镜像Images, 容器Containers, 数据卷Volumes
  8. linux scp 安装包,linux安装scp命令
  9. gentry算法_全同态加密释疑(一):四个算法(2)
  10. orgChart实现多重树状图结构
  11. STM8S的按键PWM调光灯历程
  12. Linux电源管理_Wakeup events framework--(二)
  13. 大豆技术面分析_大豆高产栽培技术分析,科学施肥很关键,建议收藏
  14. R plot图片背景设置为透明_数据科学06 | R语言程序设计模拟和R分析器
  15. 全国第17届计算机辅助设计与图形学(cad/cg)学术会议论文集,征稿资讯-CCF第24届全国计算机辅助设计与图形学学术会议 (CCF CAD/CG 2021)...
  16. 软件开发人员的内功修炼之道
  17. 豆瓣电台WP7客户端 开发记录2
  18. 2016级计算机C++助教工作(12) 第二次上机解题报告
  19. 考英语二的计算机学硕,考研201英语是英语一还是英语二?
  20. ajax怎么解决报414,414request怎么解决

热门文章

  1. Python matplotlib 论文画图之常用操作
  2. 次表面散射(Subsurface Scattering)(转)
  3. Linux的rm-rf
  4. Visual Studio Code(VSCODE)语言设置为中文
  5. 系统学习SSH(一)--SSH
  6. 扩展欧几里得求多组解CodeForces - 1244C
  7. ADB屏蔽知乎视频答案
  8. python|解决Cannot open D:\python\Anaconda\envs\tensorflow\Scripts\pip-script.py(重装pip)
  9. qq空间相册查看器_教你用微信把自己的照片制作成音乐相册,模板多,操作又简单...
  10. IP地址,子网掩码,网段 概念详解