黑马程序员——类方法与self关键字
2015-08-11 22:20
387 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
1.设计一个计算器类
方法:
1>计算两个整数的平均值
2>计算两个整数的和
每次使用计算器功能都须创建一个对象。
工具类:没有任何成员变量的类。
工具类要用类方法简单。
所以把上述的两个对象方法改为类方法,即把声明和实现中的四个-改为+
main函数改为:
int main()
{
[JiSuanQi sunOfNum1:10 andNum2:13];
}
也可将上述+(int)averageOfNum1:(int)num1 andNum2:(int)num2的实现完善成:
+(int)averageOfNum1:(int)num1 andNum2:(int)num2
{
int sum = [JiSuanQi sunOfNum1:num1 andNum2:num2];
return sum/2;
}
即在averageOfNum1:(int)num1 andNum2:类中调用sunOfNum1: andNum2:类方法。
2.类方法使用注意
输出结果:a = 111-0
333
注意:如果在-(void)test里的实现写为[p test];那就成了死循环,所以,内部方法调用的时候一定要注意。
3.self关键字
例如:
则输出结果:Person 的年龄是20岁
在这种情况下访问的是新定义的变量,不是成员变量,所以若在有局部变量时访问成员变量,
就要把成员变量赋给另一个变量,再调用。如:
把-(void)test的实现
97f7
改为:
{
int age1 = _age;
int _age = 20;
NSLog(@"Person 的年龄是%d岁",age1);
}
则输出结果:Person 的年龄是10岁
这样访问的就是成员变量了,但是这种方法太麻烦,所以,这时就考虑用到self关键字
-(void)test的实现改为:
{
int _age = 20;
NSLog(@"Person 的年龄是%d岁",self->_age);
}
则输出结果:Person 的年龄是10岁
self是一个指针,指向了方向调用者,代表着当期对象,谁调用test方法,self就指向谁
所以,本题中是[p test],指向调用该方法中的对象。
1.设计一个计算器类
方法:
1>计算两个整数的平均值
2>计算两个整数的和
#inport<Foundation/Foundation.h> //声明 @interface JiSuanQi :NSObject -(int)sumOfNum1:(int)num1 andNum2:(int)num2; -(int)averageOfNum1:(int)num1 andNum2:(int)num2; @end @implementation JiSuanQi //方法的实现 -(int)sumOfNum1:(int)num1 andNum2:(int)num2 { return num1 + num2; } -(int)averageOfNum1:(int)num1 andNum2:(int)num2 { return (num1 + num2)/2; } @end int main() { JiSuanQi *jsq = [JiSuanqi new]; [jsq sunWithNum1:10 andNum2:5]; return 0; }
每次使用计算器功能都须创建一个对象。
工具类:没有任何成员变量的类。
工具类要用类方法简单。
所以把上述的两个对象方法改为类方法,即把声明和实现中的四个-改为+
main函数改为:
int main()
{
[JiSuanQi sunOfNum1:10 andNum2:13];
}
也可将上述+(int)averageOfNum1:(int)num1 andNum2:(int)num2的实现完善成:
+(int)averageOfNum1:(int)num1 andNum2:(int)num2
{
int sum = [JiSuanQi sunOfNum1:num1 andNum2:num2];
return sum/2;
}
即在averageOfNum1:(int)num1 andNum2:类中调用sunOfNum1: andNum2:类方法。
2.类方法使用注意
#inport<Foundation/Foundation.h> //声明 @interface Person :NSObject { int age; } +(void)test; -(void)test; @end @implementation Person //方法的实现 -(void)test { NSLog(@"111-%d",age); [Person test]; } +(void)test { NSLog(@"333"); } @end int main() { Person *c = [Person new]; [p test]; }
输出结果:a = 111-0
333
注意:如果在-(void)test里的实现写为[p test];那就成了死循环,所以,内部方法调用的时候一定要注意。
3.self关键字
例如:
#inport<Foundation/Foundation.h> //声明 @interface Person :NSObject { int _age; } -(void)setAge:(int)age; -(int)age; -(void)test; @end @implementation Person //方法的实现 -(void)setAge:(int)age { _age = age; } -(int)age { return age; } -(void)test { NSLog(@"Person 的年龄是%d岁",_age); } @end int main() { Person *p = [Person new]; [p setAge:10]; [p test]; }
则输出结果:Person 的年龄是20岁
在这种情况下访问的是新定义的变量,不是成员变量,所以若在有局部变量时访问成员变量,
就要把成员变量赋给另一个变量,再调用。如:
把-(void)test的实现
97f7
改为:
{
int age1 = _age;
int _age = 20;
NSLog(@"Person 的年龄是%d岁",age1);
}
则输出结果:Person 的年龄是10岁
这样访问的就是成员变量了,但是这种方法太麻烦,所以,这时就考虑用到self关键字
-(void)test的实现改为:
{
int _age = 20;
NSLog(@"Person 的年龄是%d岁",self->_age);
}
则输出结果:Person 的年龄是10岁
self是一个指针,指向了方向调用者,代表着当期对象,谁调用test方法,self就指向谁
所以,本题中是[p test],指向调用该方法中的对象。
相关文章推荐
- 码农成长篇——新员工怎样快速脱颖而出
- 黑马程序员 oc随记 协议与代理模式
- 程序员扩大影响力之如何写博客
- 黑马程序员
- 黑马程序员——弱语法与类方法
- 黑马程序员——封装
- 高效程序员的狂暴之路
- 高效程序员的狂暴之路
- 高效程序员的狂暴之路
- php常见的面试题目
- 新浪php面试题
- 黑马程序员——详细的类的声明和实现
- 静态链接的一点小总结(一) 《程序员的自我修养》·笔记
- 黑马程序员——java复习总结——面向对象
- 黑马程序员——对象与函数
- C#基础系列——再也不用担心面试官问我“事件”了
- 剑指Offer面试题47(Java版):不用加减乘除做加法
- (剑指Offer)面试题61:按之字形顺序打印二叉树
- 面试常见问题 死锁代码&单例模式
- 丑数——剑指offer面试题34