黑马程序员技术交流社区

标题: 面向对象-将对象做为函数参数 [打印本页]

作者: DarkHorseChuck    时间: 2015-4-16 22:35
标题: 面向对象-将对象做为函数参数
今天看做基础视教程的时候,老师布置的作业 是将对象作为函数的参数,然后分析出打印结果
由于不明白结果,自己重新写了段代码来做测试分析,代码如下
  1. #import <Foundation/Foundation.h>
  2. //类的声明
  3. @interface Car : NSObject
  4. {
  5.     @public
  6.     int speed;
  7.     int wheels;
  8. }

  9. -(void)run;
  10. @end

  11. //函数的声明
  12. void test(Car *newCar);

  13. //类的实现
  14. @implementation Car
  15. -(void)run
  16. {

  17.     NSLog(@"时速为%dk/h,车轮%d个,正在行驶!\n", speed, wheels);

  18. }


  19. @end

  20. int main()
  21. {
  22.     //创建对象
  23.     Car *car1 = [Car new];
  24.     car1->speed = 30;
  25.     car1->wheels = 4;
  26.     [car1 run];
  27.    
  28.     //调用函数
  29.     test(car1);
  30.     //调用方法
  31.     [car1 run];
  32.     return 0;
  33. }

  34. //函数定义
  35. void test(Car *newCar)
  36. {
  37.     Car *car3 = [Car new];
  38.     car3->speed = 50;
  39.     car3->wheels = 3;
  40.     newCar = car3;
  41.     newCar->speed = 40;
  42. }
复制代码



结果
2015-04-16 22:20:16.447 a.out[1924:123016] 时速为30k/h,车轮4个,正在行驶!
2015-04-16 22:20:16.448 a.out[1924:123016] 时速为30k/h,车轮4个,正在行驶!

我最开始的答案是
2015-04-16 22:20:16.447 a.out[1924:123016] 时速为30k/h,车轮4个,正在行驶!
2015-04-16 22:20:16.448 a.out[1924:123016] 时速为40k/h,车轮3个,正在行驶!

后面算是弄明白了,我认为void test(car1)的执行过程是这样的
1.car1是指向对象的指针,其值是对象地址,将其传入函数是 将其值传给了newCar ,所以newCar = car1;
2.创建对象car3,并为成员变量赋值
3.newCar = car3 car3将值传给newCar,newCar现在指向的是car3
4.newCar ->speed = 40,其实现在是在给car3赋值了,所以car1的成员变量值没有改变;
所以真的是想通了之后觉得太简单了,希望能帮到这个知识点不明白的同学,也希望就只有我一个人不明白这知识点





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2