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

———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的车子跑起来了。

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

时间: 2024-10-03 23:54:14

黑马程序员 06-OC对象与函数的相关文章

【黑马程序员】————OC特有语法

一.点语法 点语法的本质还是方法调用 p.age = 10; // [p setAge:10]; int a = p.age; // [p age]; 二.成员变量的作用域 @public : 在任何地方都能直接访问对象的成员变量 @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private) @protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected) @package : 只要处在

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N

黑马程序员-OC-面向对象

------- IOS培训.android培训.java培训.期待与您交流! ---------- 面向对象和面向过程的区别 面向过程关心的是解决问题需要哪些步骤. 面向对象关注的是解决问题需要哪些对象. oc中的面相对象 世界万物皆对象. 面向对象更加复合人民的思考习惯,将复杂的事情简单化处理,使人民从执行者变成了指挥者 oc中的类相当于图纸,用来描述一类事物.也就是说,要想创建对象,必须先有类 oc利用类来创建对象,对象是类的具体存在 因此,面向对象解决问题应该是先考虑需要设计哪些类,再利用

黑马程序员_类对象创建代码的执行顺序测试总结

class StaticCode { // 类的非静态成员变量(实例变量)定义语句: // 作用:用来存储对象的特有数据的成员变量. // 运行:当类对象被创建时就执行,按照顺序自上而下执行,和构造代码块平级.(即当有多个构造函数 // 代码块和多个非静态成员变量时,JVM按照自上而下的顺序来执行所有语句,包括构造代码块里的代码 // 和非静态成员的声明.) // 存储位置:非静态变量位于堆内存中的对象实体中. int num = 3; // 构造代码块 { System.out.println

【黑马程序员】OC基本语法——类与对象相关概念

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 最近在学OC的面向对象部分,可能是因为以前学Java和PHP时习惯了主流的面向对象思想,接触到OC的面向对象有很多说法都不习惯,查了很多东西,终于基本都搞清楚了,在这里小结一下. 一.类和对象 1.类:类是一个抽象概念,代表着一类事物,如:人,动物,交通工具等:这个和Java或PHP里类的概念没有区别. 其定义方法如下: @interface Student : NSObject { NSSt

《黑马程序员》 OC的三大特性

OC 的三大特性:封装.继承.多态. 封装:过滤不合理的值 #import <Foundation/Foundation.h> // set 方法 // 作用:提供一个方法给外界设置成员变量,可以在方法对成员变量进行赋值和过滤 // get 方法 // 作用:返回对象内部的成员变量,得到成员变量的值. @interface Student : NSObject { // 成员变量名的命名规范 // 成员变量名肯定以下划线开头 // 好处:可以区分参数名称和成员变量的名称,也可以区分变量名和成员

黑马程序员 01-面向对象思想和面向过程思想

———Java培训.Android培训.iOS培训..Net培训.期待与您交流! ——— OC是面向对象的,C是面向过程的.二者只是解决问题的两种不同的思想. 1.面向对象和面向过程的区别 (1)以用电脑看电影为例 <1>面向过程思想(关注的是具体的步骤) 这里我们是执行者,我们需要关注具体每个步骤怎么来实现. 1)开电脑(步骤1) 2)播放电影(步骤2) 3)关闭电脑(步骤3) <2>面向对象思想(关注的是对象) 这里我们是指挥者,具体行为由电脑来执行,我们不必关注具体是怎么执行

黑马程序员 02-类与对象的关系

———Java培训.Android培训.iOS培训..Net培训.期待与您交流! ——— 1.如何创建对象 1)面向对象解决问题的时候必须有对象,那么如何创建对象呢? 2)现实生活的例子:如何创建汽车对象? a)首先需要有汽车的图纸,图纸上描述汽车应该具备的属性和功能(行为) 属性:轮子个数.时速 功能(行为):跑 b)然后根据图纸上的描述创建汽车 c)每一辆车都具有自己的属性和功能,都是图纸的实例 d)图纸是抽象的,汽车是具体的:图纸是对汽车对象的高度概括 2.OC中的面向对象 1)OC中的类

黑马程序员 07-OC的对象方法

———Java培训.Android培训.iOS培训..Net培训.期待与您交流! ——— OC中的方法分为对象方法和类方法,这里介绍对象方法. 1.对象方法 规则:1.以减号 - 开头; 2.所有数据类型(返回值.参数)都必须写在小括号()里面,而且只有数据类型可以写在小括号()里面; 3.方法名遵循驼峰原则; 4.如果没有参数,方法名后面什么都不写,例如 -(void)lookMyPhone; 5.一个参数对应一个冒号:,冒号:也是方法名的一部分; 例如:-(void)sendMessage:

黑马程序员 11-OC匿名对象

———Java培训.Android培训.iOS培训..Net培训.期待与您交流! ——— 匿名变量:利用类创建一个对象的时候,没有将对象的地址交给一个指针变量保存,这样的对象称为匿名对象,即没有指针指向的对象. //匿名变量 1 #import <Foundation/Foundation.h> 2 //类的声明 3 @interface Car : NSObject 4 { 5 @public//表示允许外界指针间接访问对象的成员变量 6 int _speed;//速度 7 } 8 //方法