Objective-C复合

正所谓复合,便是定义的这个类中的成员是另外类的实例方法。

也就是把其他对象作为自身的题部分,以提升自身的功能,

就相当于C语言中的函数嵌套。下面是一段代码(多个文件放在一块了):

 1 /***Computer类的声明***Computer类的声明***Computer类的声明***/
 2 #import <Foundation/Foundation.h>
 3
 4 @interface Computer : NSObject
 5
 6 @property (nonatomic, strong) NSString *brand;//声明一个字符串对象属性brand
 7
 8 @end
 9
10 /***Computer类的实现***Computer类的实现***Computer类的实现***/
11 #import "Computer.h"
12
13 @implementation Computer
14
15 @end
16
17 /***Desk类的声明***Desk类的声明***Desk类的声明***/
18
19 #import <Foundation/Foundation.h>
20
21 @interface Desk : NSObject
22
23 @property (nonatomic, strong) NSString *color;//声明一个字符串对象属性color
24
25 @end
26
27 /***Desk类的实现***Desk类的实现***Desk类的实现***/
28
29 #import "Desk.h"
30
31 @implementation Desk
32
33 @end
34
35 /***ClassRoom类的声明***ClassRoom类的声明***ClassRoom类的声明***/
36
37 #import <Foundation/Foundation.h>
38 #import "Desk.h"
39 #import "Computer.h"
40
41 @interface ClassRoom : NSObject
42 @property (nonatomic, strong) Desk *desk;//声明一个Desk的对象desk的属性 这里用的就是复合
43 @property (nonatomic, strong) Computer *computer;////声明一个Computer的对象computer的属性这里用的也是复合
44 @end
45
46 /***ClassRoom类的实现***ClassRoom类的实现***ClassRoom类的实现***/
47
48 #import "ClassRoom.h"
49 @implementation ClassRoom
50 -(NSString *)description{  //库方法,方法的重写
51     NSString *str = [NSString stringWithFormat/*方法*/:@"我们的教室有%@的桌子,%@电脑",self/*当前方法的调用者-ClassRoom*/.desk.color,self.computer.brand];
52     return str;
53 }
54 @end
55
56 /***主函数***主函数***主函数***主函数***主函数***主函数***主函数*/
57
58 #import <Foundation/Foundation.h>
59 #import "ClassRoom.h"
60
61 int main(int argc, const char * argv[]) {
62     @autoreleasepool {
63
64         ClassRoom *classRoom = [[ClassRoom alloc] init];
65         Desk *de= [[Desk alloc] init];
66         classRoom.desk = de;//给对象的属性(类的对象)赋值,先初始化该属性
67         classRoom.desk.color = @"褐色";//给属性的属性赋值
68
69         Computer *com = [[Computer alloc] init];
70         com.brand = @"黑苹果";//对象完全初始化之后,再给其所属的对象赋值
71         classRoom.computer = com;
72
73        NSLog(@"%@",classRoom);
74     }
75     return 0;
76 }
时间: 2024-10-23 09:34:10

Objective-C复合的相关文章

sphinx中复合属性字段sql_attr_multi的用法

sphinx中复合属性字段sql_attr_multi的用法 sql_attr_multi在sphinx可以用来检索有层级关系的数据,效率相当高,如,在数据库中用一个4层的分类,分类下对应着不用的文章,现在需要做一个文章列表,要求,选择第一级分类时属于它的子分类的文章也要显示出来,就可以用下面的方法建索引 sql_query=                 SELECT di.company_document_id as id,di.company_document_id,          

《objective-c基础教程》学习笔记(六)—— 复合方法

今天我们要讲的复合,当然不是小情侣吵着分手,然后又在一起的复合. 复合遵循一个合成复用原则,又称为组合或者聚合复用原则.该原则的内容是:尽量使用对象组合,而不是继承来达到复用的目的.用聚合可以使系统更加灵活,类与类之间的耦合度降低.在objective-c中,复合是指将多个组件组合在一起,配合使用,从而得到一个完整的作品.严格的说,只有对象之间的组合才是复合.类中的基本数据和结构型对象不算复合. 继承和复合,是类与类之间两种重要的关系.接下来,我们就借用书本上的例子来介绍下复合关系. 假如我们要

ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套

这是ElasticSearch 2.4 版本系列的第六篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门 第四篇:使用C#添加和更新文档 ElasticSearch入门 第五篇:使用C#查询文档 ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套 在ElasticSearch中,使用JSON结构来存储数据,

复合赋值和简单复制的区别

编写一个程序 使得x+=i合法, x = x+i: 不合法. 许多人会认为第一个表达式和第二个表达式是完全等价的,这是错误的. 在java 中 复合赋值 E1 op=  E2 等价于简单赋值E1 = (T)((E1)op(E2)); 其中T 表示的是E1的类型. 换句话说复合赋值的最后结果类型和左操作数的一致的. 如果最后结果的类型和左操作数的类型一样,那么这两个表达式就完全等价. 假若最后结果的类型比左操作数的类型要宽,那么复合赋值操作符将悄悄的执行一个窄化过程. 例: short x = 0

Kotlin中复合赋值(+=,-=,……)运算符重载

本篇建立在已经了解了kotlin中运算符重载的理念以及如何实现的基础上. 来我们首先写一个简单的类,然后重载运算符+,+=,-,-=这个几个运算符.代码如下: data class Point(var x: Int, var y: Int) { operator fun plus(point: Point): Point { return Point(this.x + point.x, this.y + point.y) } operator fun plusAssign(point: Poin

复合索引的优点和注意事项

概念:     单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上;     用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引);     复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引;     同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引;     设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效; 使用:     创建索引     create index idx1 o

c语言:复合文字

复合文字的意义,相当于是在C语言中,为数组类型定义了一种类似于8之于int,'w'之于char一样的常量类型,所以从C99之后,可以在一些地方使用复合文字来代替数组使用. 复合文字的声明 (int [3]){1,2,3}; //一个复合文字,定义类似于数组的定义(int []){1,2,5,6,8}; //类似于数组,复合文字的定义也可以省略大小 因为复合文字没有名称,所以,不能在一个语句中创建,而在另一个语句中使用.必须在一个语句中创建的同时使用他们. 一种可能的使用方法是在创建的同时使用指针

计算复合收益和复合收益率

计算复合收益和复合收益率,还是要从最基本的公式开始推,这里用年复合收益和年复合收益率来举例说明,计算方面用 python 代码来实现 例子1:初始资金2元,年收益率为 20%,5年后资金为多少? import math # 方法1,最原始的计算方法,代码多,逻辑最清晰 capital = 2 rate = 0.2 for i in range(0, 5): capital *= 1 + rate print(str(capital)) # result = 4.97664 # 方法2, 利用平方

MVC模式 - 一种复合模式

MVC模式可以说是我们从事WEB开发人员最常见的模式 实际上,它是复合模式,一种由2个及以上的设计模式组成的设计模式 实际上是三个组件组成的模式,数据模型.视图.控制器 可以看得出来,实际上MVC是由观察者.组合.策略模式所组成的复合模式

React 组件复合

React组件复合 · 通过React写组件时,应当尽可能地将组件分为更小的更多的组件,然后再复合组件. 比如下面的评论组件就是一个组件,一个庞大的组件,这时我们还没有将之分解,更没有复合: function Comment(props) { return ( <div className="Comment"> <div className="UserInfo"> <img className="Avatar" sr