现在 我们 可以 重新 创建 Rectangle这类物件了,新的Rectangle这类物件 不仅 包含了 宽 和 高,而且 也 包含了 位置。先 来看看 完整的程序 是 什么样的:
文件XY.h:
文件XY.m
文件Rectangle.h:
文件Rectangle.m:
文件main.m:
在这个程序当中 我 创建了 XY这类物件 用来表示 坐标系中的点。在Rectangle这类物件当中 我 创建了 一个XY *类型的变量location 来存储 长方形的位置,就像 这样:
根据 以往的知识,要对 某一个Rectangle类型物件的变量width、height 进行读 和 写的操作,我们 只需要 在.h 和 .m文件当中 分别 加入
和
这两行语句,编译器 就会 自动 生成 width、setWidth 和 height、setHeight这两对措施。如果 要对 某个Rectangle类型物件的变量location 进行读 和 写的操作,我们 就需要 自己 编写 location 和 setLocation这两项措施了。
文件Rectangle.h当中的
和 文件Rectangle.m当中的
正好 达到了 这样的目的。有了 location 和 setLocation这两项措施,我们 可以使用 简便方法 对某个Rectangle物件的变量location 进行 读 和 写的操作,就像 这样:
这 跟
的作用 是 一样的。
在Rectangle.h 和 Rectangle.m这两个文件当中,我 告诉了 编译器 location 可以存储 XY类型的物件,location这项措施 会传递回 一个XY类型的物件,setLocation这项措施的参数 是 XY类型的物件,但是 编译器 并不知道 XY 是 什么。于是 我 在文件Rectangle.h当中 添加了 这行语句:
这下子 编译器 就知道了 原来 XY 是 一类物件的名称。
在主程序当中,我 分别 创建了 myRectangle 和 myXY这两个物件,来代表 一个长方形 和 一个坐标系中的点。
这行语句 对 myXY这个物件 采取了 setX:andY:这项措施 并且 附带了 100 和 200 作为参数,从而 将 物件myXY所代表的坐标系中的点 设定为 (100,200)。
这行语句 将 myXY这个物件 存储 在物件myRectangle中的location这个变量当中。由于 myXY这个物件 代表 (100.200)这个点,而 location这个变量 又 代表 长方形myRectangle的位置,于是 刚刚这行语句 就是 将 myRectangle这个长方形的位置 设定为 (100.200)。
这行语句 完全 相当于
这行语句。
接下来的
分别 读取了 物件myRectangle中location这个物件的变量x 和 y的值(也就是 myRectangle这个长方形的位置的横坐标 和 纵坐标),并且 显示出来。其中
这两个表达式 同样 完全 相当于
和
运行 这个程序后,可以得到 这样的结果: