黑马程序员技术交流社区
标题:
面向对象-将对象做为函数参数
[打印本页]
作者:
DarkHorseChuck
时间:
2015-4-16 22:35
标题:
面向对象-将对象做为函数参数
今天看做基础视教程的时候,老师布置的作业 是将对象作为函数的参数,然后分析出打印结果
由于不明白结果,自己重新写了段代码来做测试分析,代码如下
#import <Foundation/Foundation.h>
//类的声明
@interface Car : NSObject
{
@public
int speed;
int wheels;
}
-(void)run;
@end
//函数的声明
void test(Car *newCar);
//类的实现
@implementation Car
-(void)run
{
NSLog(@"时速为%dk/h,车轮%d个,正在行驶!\n", speed, wheels);
}
@end
int main()
{
//创建对象
Car *car1 = [Car new];
car1->speed = 30;
car1->wheels = 4;
[car1 run];
//调用函数
test(car1);
//调用方法
[car1 run];
return 0;
}
//函数定义
void test(Car *newCar)
{
Car *car3 = [Car new];
car3->speed = 50;
car3->wheels = 3;
newCar = car3;
newCar->speed = 40;
}
复制代码
结果
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