【黑马程序员】-oc中对象的封装

------<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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值