------<a href="http://www.itheima.com"target="blank">android培训</a>、<a href="http://www.itheima.com"target="blank">java培训</a>、期待与您交流! ----------
object c中面向对象的三大特征为:成员变量的封装、继承、多态。最近,通过时视频的学习对成员变量的封装有了许多的认识,因此在此做一些总结,如有不对之处,还望指正。
首先是介绍set方法,set方法是为了提供一个给外界设置成员变量的方法,并对成员变量进行限制。set方法在命名上有一定的规范:第一,必须以set开头;第二,set后边跟上成员变量的名称,成员变量的首字母必须大写;第三,返回值是void,即无返回值;第四,一定要接收一个参数,而且参数类型跟成员变量的类型要保持一致;第五,形参的名称不能跟成员变量一样。在属性只允许访问的情况下,set方法是不能提供的。
2、get方法:用来返回对象内部的成员变量。它的命名规则主要有:第一,肯定有返回值,返回值类型肯定与成员变量一致;第二,不需要接收任何参数。在命名上,除了成员变量需要在开头加上一个下划线之外,get的方法名是和成员变量相同的。
提到成员变量的命名,这里说一下成员变量最好在命名的开始加上下划线“—”,这一来可以与get方法的名称区分开,二来可以跟局部变量区分。下面以一个实例列举:
程序:学生的性别和学号
#import <Foundation/Foundation.h>
//枚举方法,规定人得性别只有两种选择。
typedef enum {
sexMan,
sexWoman
} Sex;
//声明一个学生类
@interface Student: NSObject
{
//类的成员变量
int _age;
double _weight;
//利用组合,定义学生的性别
Sex _sex;
}
- (void)setAge: (int)age;
- (int)age;
- (void)setSex: (Sex)sex;
- (Sex)sex;
@end
//学生类的实现
@implementation Student
- (void)setAge: (int)age
{
_age = age;
}
- (int)age
{
return _age;
}
- (void)setSex: (Sex)sex
{
_sex = sex;
}
- (Sex)sex
{
return _sex;
}
@end
int main()
{
//创建一个学生对象,并设置学生的年龄和性别;
Student *stu = [Student new];
[stu setAge: 15];
[stu setSex: sexMan];
//利用getter方法获取学生的性别和年龄;
[stu sex];
[stu age];
//利用getter方法获取性别和年龄后进行输出;
NSLog(@"学生的性别是%d, 年龄是%d",[stu sex], [stu age]);
return 0;
}
3、类方法
类方法的创建都是都以+开头,这点要与对象方法的区分开来(对象方法是以-开头)。类方法的主要优点是在主函数中不用穿件对象也可以用来实现方法,执行效率高。因此,在方法内部不需要使用成员变量的时候,就可以使用类方法。例如在设计计算器的程序时,如果选择使用对象方法,那么在计算两个数的和或差的时候,都要创建一个对象,而利用类方法就省去了类的创建。
类方法和对象方法在命名时是可以出现重名的,只要开头表明加减号即可。在调用时,类方法不可以调用对象的属性,当然在大多时候也不可以调用对象方法。但是,对象方法中可以调用类的方法。
类方法和对象方法在调用时,不要出现自调用,这样会导致死循环。
下面就以计算器为例:#import <Foundation/Foundation.h>
//类的声明;
@interface JiSuan: NSObject
//类方法以“+”开头;对象方法以“-”开头。
+ (int)sumWithNo1:(int) a andNo2: (int) b;
+ (int)minusWithNo1:(int) a andNo2: (int) b;
@end
//类的实现;
@implementation JiSuan
+ (int)sumWithNo1:(int) a andNo2: (int) b
{
return a+b;
}
+ (int)minusWithNo1:(int) a andNo2: (int) b
{
return a-b;
}
@end
int main(int argc, const char * argv[])
{
int sum; //定义一个存放两个数的和的变量
int minus; //定义一个存放两个数的差的变量
//调用类方法计算两个数的和;
sum = [JiSuan sumWithNo1:10 andNo2:12];
//调用类方法计算两个数的差;
minus = [JiSuan minusWithNo1:23 andNo2:11];
NSLog(@"数10与数12的和为%d,数23与数11的差为%d",sum, minus);
return 0;
}
4.在这里提到两个数和、差得计算,其实在计算两个数的和、差时最好的方法是利用指针。
指针在计算两个数的和、差时,可以通过一次调用,就计算出两个数的和、差。这里就利用函数指针的方法,加以
#import <Foundation/Foundation.h>
int sumAndMinus(int a, int b, int *m)
{
*m = a-b;
return a+b;
}
int main(int argc, const char * argv[])
{
int a = 14;
int b = 4;
int minus; //定义一个存放两数之差的变量;
//定义一个指针指向函数。
int (*p)(int, int, int *) = sumAndMinus;
//利用&minus将minus的地址传给函数变量的指针。
int sum = p(a, b, &minus);
NSLog(@"两个数的和为%d, 两个数的差为%d", sum, minus);
return 0;
}