码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员 06-OC对象与函数

时间:2014-09-27 16:48:40      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   color   io   os   ar   java   

———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———

创建一个Car类,再利用Car类创建对象,代码如下:

 1 #import <Foundation/Foundation.h>
 2 @interface Car : NSObject
 3 {
 4     //成员变量
 5     @public
 6     int _wheels;
 7     int _speed;
 8 }
 9 - (void)run;
10 @end
11 
12 @implementation Car
13 - (void)run
14 {
15     NSLog(@"%d个轮子,速度为%ikm/h的车子跑起来", _wheels, _speed);
16 }
17 @end
18 int main(int argc, const char * argv[])
19 {
20     Car *car1 = [Car new];
21     car1 -> _wheels = 4;
22     car1 -> _speed = 250;
23   
24     [car1 run];
25     return 0;
26 }

上面的代码输出结果为:4个轮子,速度为250km/h的车子跑起来了

下面我们我们在上面的代码中加入函数,来分析输出结果会有什么变化:

1、加入3个函数:test、test1、test2

 1 void test(int w, int s)
 2 {
 3     w = 20;
 4     s = 200;
 5 }
 6 
 7 void test1(Car *newCar)
 8 {
 9     newCar -> _wheels = 5;
10 }
11 
12 void test2(Car *newCar)
13 {
14     Car *car2 = [Car new];
15     car2 -> _wheels = 5;
16     car2 -> _speed = 300;
17     newCar = car2;
18     newCar -> _wheels = 6;
19 }

2、分析

(1)当main函数调用test函数的时候,实参_wheels = 4,_speed = 250传到test函数中,只是改变了w 和 s的值,属于值传递,并没有改变_wheels 和 _speed的值;所以输出结果是:4个轮子,速度为250km/h的车子跑起来了。

(2)car1调用test1函数,car1作为指针变量传递给test1函数,属于地址传递。这时,test1函数中:car1 ->_wheels = 5, _wheels的值被改变。所以输出结果是:4个轮子,速度为250km/h的车子跑起来了。

(3)test2函数,函数的形参是一个Car类的指针变量。在这个函数中,又利用Car类创建了一个新对象,并把新对象的地址赋值给了car2,这时car2指向新对象;接下来car2对新对象的成员变量进行赋值。

  当car1调用test2函数的时候,执行第17行代码,结果为:car1 = car2,改变了car1的指向,即car1也指向了car2所指向的对象,然后car ->_wheels = 6,也是给car2所指向的新对象赋值。自始至终没有对car1原来指向的对象进行赋值操作,输出结果为:4个轮子,速度为250km/h的车子跑起来了。

注:由于对象把地址赋值给了指针变量,我们习惯上就把这个指向对象的指针变量称为对象。

黑马程序员 06-OC对象与函数

标签:android   style   blog   http   color   io   os   ar   java   

原文地址:http://www.cnblogs.com/xdl745464047/p/3996439.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!