黑马程序员——OC基础——面向对象的三大特性(一)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

面向对象的三大特性:封装(成员变量),继承和多态。

一,封装

在OC语言中,使用@interface和@implementation来处理类。

@interface就好像暴露在外面的时钟表面,像外界提供展示和接口。@implementation像是隐藏在时钟内部的构造实现,把具体的实现封装了起来,如图;


Set方法:

考虑到安全性的要求一般不在成员变量的前面加@public、@protected等关键字修饰,而是使用set方法。

set方法调用时也可以过滤掉一些不合理的赋值行为。

set方法的作用:为外界提供一个设置成员变量值的方法

命名规范:

1,方法名必须以set开头

2,set后面跟上成员变量的名称,首字母大写

3,返回值一定是void

4,一定要接收一个参数,且参数类型需要和成员变量的类型一致

5,形参名不能和成员变量名称一样

set方法的优点:1,成员变量不能直接被调用,保证了数据的安全性

       2,对不合理的数据赋值请求可以进行过滤

set方法的使用例子:

set方法的声明

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    //这里不在使用@public关键字
    int _age;
}
//set方法声明,接受一个参数
- (void)setAge:(int)age;
- (void)print;
@end
set方法的实现
@implementation Person
//set方法的实现
- (void)setAge:(int)age {
    
    _age = age;

}
//实现print方法,打印age的值
- (void)print {
    NSLog("age = %d",_age);
}
@end
创建Person对象:
int main()
{
    Person *p = [Person new]
   //使用set方法设置person类的age属性
    [p setAge:10];
    [p print];
    return 0;
}
打印输出结果:age = 10

Get方法:

作用:为调用者返回对象内部成员变量的值

命名规范:

1,一定有返回值,返回值类型和成员变量的类型一直

2,方法明和成员变量名一样

3,不需要接收任何参数

get方法的实例:

get方法的声明:

#import <Foundation/Foundation.h>
@interface Person : NSObject
{
    double _weight;
}
//设置set方法
- (void)setWeight:(double)weight ;
//设置get方法
- (void)weight;
@end
    

get方法的实现:

@implementation Person
//set方法的实现
- (void)setWeight:(double)weight 
{
    _weight = weight;
}
//get方法的实现
- (double)weight
{
    return _weight;
}
@end
运行程序:
int main()
{
    //创建一个Person对象
    Person *p = [Person new]
    //使用set方法为成员变量赋值
    [p setWeight:68]
    //使用get方法获取成员变量的值
    NSLog("%f",[p weight]);
    return 0;
}
程序运行结果:68

注意:set方法和get方法有时不一定都要有,例如当有些成员变量的值只需要读取不需要改变时,只需要有get方法即可。

成员变量名的命名以下划线开头,get方法不需要下划线,使用下划线有两个好处:

1,与get方法的方法名区分开

2,可以和其他局部变量区分开,下划线开头的变量,通常都是类的成员变量。

练习:

要求 :1,设计一个成绩类

            2,这个类有一下四个属性:C的成绩(可读写),OC的成绩(可读写),总分(只读),平均分(只读)

声明:

#import <Foundation/Foundation.h>
//程序的声明
@interface Score : NSObject
{
    int _CScore;//C分数
    int _OcScore;//OC分数
    int _TotalScore;//总分
    double _average;//平均分
}
- (void)setCScore:(int)CScore;//用于设置C的分数
- (int)CScore;//返回C分数
- (void)setOcScore:(int)OcScore;//用于设置OC的分数
- (int)OcScore;//用于返回OC的分数
- (int)TotalScore;//用于返回总分
- (double)average;//声明一个平均数方法
- (void)print;//声明一个打印函数用于打印C和OC的分数
@end
实现:
//程序的实现
@implementation Score
- (void)setCScore:(int)CScore//设置C分数
{
    _CScore = CScore;
   
}
- (int)CScore//返回C的分数
{
    return _CScore;
}
- (void)setOcScore:(int)OcScore//设置OC分数
{
    _OcScore = OcScore;
    //这里直接运算总分和平均分,因为设置OC的分数时程序会调用该方法
    _TotalScore = _CScore + _OcScore;//计算总分
    _average = _TotalScore*0.5;//计算平均分
}
- (int)OcScore//返回OC分数
{
    return _OcScore;
}
- (int)TotalScore//返回总分
{
    return _TotalScore;
}
- (double)average//返回平均分
{
    return _average;
}
- (void)print//打印C分数和OC分数
{
    NSLog(@"C score is %d,OC score is %d",_CScore,_OcScore);
}
程序测试:
//主程序
int main()
{
    //
    Score *score = [Score new];
    [score setCScore:60];//
    [score setOcScore:80];//
    [score print];//
    //定义两个变量用于存储总分和平均分
    int total = [score TotalScore];
    double aver = [score average];
    //打印总分和平均分
    NSLog(@"TotalScore score is %d",total);
    NSLog(@"average score is %f",aver);
}
@end

程序运行结果:

2014-12-11 16:06:55.160 a.out[30784:6034466] C score is 60,OC score is 80
2014-12-11 16:06:55.162 a.out[30784:6034466] TotalScore score is 140
2014-12-11 16:06:55.162 a.out[30784:6034466] average score is 70.000000

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值