OC第二天-实例变量可见度,setter和getter方法,导入头文件

实例变量可见度、方法、setter、getter
Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject{

//    在声明成员变量的时候,如果没有使用关键字进行说明,默认是受保护类型
    NSString *_address;



    @public//公开的  可以在本类和类外面访问和修改;可以在任何地方访问和修改;
    NSString *_name;

    @protected//受保护的  作用域 在本类和子类 ;
    NSString *_sex;

    @private//私有的  只能在本类里面对他修饰的成员进行访问 和 修改
    int      _age;


    @package//作用于整个框架Cocoa框架

}

//setter(设置器)的书写格式:实例前面的_去掉,将首字母大写,然后前面加上set;设置器方法没有返回值
//即set+首字母⼤写的实例变量名(忽略下划线)
-(void) setAge:(int)age;
-(void) setName:(NSString *)name;
-(void) setAddress:(NSString *)address;
-(void) setSex:(NSString *)sex;

//getter(访问器)书写格式:变量名字去掉下划线 加上返回值类型

-(int)age;
-(NSString *)name;
-(NSString *)sex;
-(NSString *)address;

//声明一个 自定义的初始化方法
-(id)initWithName:(NSString *)name;


//方法标识后面的括号中的类型是返回值类型;void表示空类型,没有返回值;
-(void) print;

//获取年龄
-(int) getAge;

//id 和instancetype比较: 1、都表示对象类型;2、id在编译阶段不确定类型,instancetype在编译阶段已经确定类型 3、id可以当做参数类型来使用,而instancetype不可以,只能当做返回值类型
-(instancetype) printf;




//:冒号表示方法有参数;:冒号后面就是这个方法的参数 ()里面是参数的类型,()后面是参数的名字;冒号前面是参数的修饰词,就是对参数的解释
//方法名字:initWithName:age:::
-(id) initWithName:(NSString *)name age:(int)age ;


//声明一个设置方法
-(void) setName:(NSString *)name
            age:(int)age
        address:(NSString *)address;

@end

//学生类的声明部分
@interface Student : Person

@end

Person.m

#import "Person.h"

@implementation Person

//设置器的实现
-(void) setAge:(int)age{
    _age = age;
}
-(void) setName:(NSString *)name{
    _name = name;
}
-(void) setAddress:(NSString *)address{
    _address = address;
}
-(void) setSex:(NSString *)sex{
    _sex = sex;
}

//访问器(获取器)的实现
-(int)age{
    return _age;
}
-(NSString *)name{
    return _name;
}
-(NSString *)sex{
    return _sex;
}
-(NSString *)address{
    return _address;
}


//实现一个 自定义的初始化方法
-(id)initWithName:(NSString *)name{
//    先让父类执行一次初始化方法
    self = [super init];
//    然后判断,并对实例变量进行设置
    if (self) {
        _name = name;
    }
    return self;
}


-(void) print{
    NSLog(@"_age = %d",_age);
}

-(int) getAge{
    return 20;
}


-(void) setName:(NSString *)name
            age:(int)age
        address:(NSString *)address{
    _name = name;
    _age = age;
    _address = address;
}

@end

@implementation Student

-(void)print{
    Person *p = [[Person alloc] init];
    p -> _sex = @"man";

}

@end

AudiCar.h

#import <Foundation/Foundation.h>

@interface AudiCar : NSObject{
    @public
    NSString *_color;
    NSString *_brand;
    float    _price;
}
//setter设置器
-(void)setColor:(NSString *)color
          Brand:(NSString *)brand
          Price:(float)price;
//声明两个方法
-(void) print;
//
+(void) run;

@end

AudiCar.m

#import "AudiCar.h"

@implementation AudiCar

-(void)setColor:(NSString *)color
          Brand:(NSString *)brand
          Price:(float)price{
    _color = color;
    _brand = brand;
    _price = price;
}

-(void) print{
    NSLog(@"sf");
}

+(void) run{
    self;//表示类本身,就是类的名字

    //    不能在+方法中访问实例变量
    //    _address;
}

@end

Man.h

#import <Foundation/Foundation.h>
//#import "Woman.h"
@class Woman;//用class关键字声明类,解决用import导入文件时产生的循环编译的问题class只是一个声明的作用,就是告诉编译器 这个类是存在的,但是不编译;

@interface Man : NSObject{
    Man *_woman;

}
@end

Man.m

#import "Man.h"

@implementation Man

@end

Woman.h

#import <Foundation/Foundation.h>
//#import "Man.h"
@class Man;

@interface Woman : NSObject{

    Man *_MAN;
}
@end

Woman.m

#import "Woman.h"

@implementation Woman

@end

main.m

#import <Foundation/Foundation.h>
#import "Person.h"
#import "AudiCar.h"

#import "Man.h"
#import "Woman.h"


//#include "Person.h"//是C语言中导入头文件的方法,如果在一个文件中重复导入相同的文件,就会出错
//#include "Person.h"

#import "Person.h"//解决了重复导入头文件的问题,避免重复编译的错误;
#import "Person.h"
#import "Person.h"


int main(int argc, const char * argv[]) {

    Person *person = [[Person alloc]init];

    [person setName:@"zhangdan" age:20 address:@"北京"];


    AudiCar *p = [[AudiCar alloc] init];
    [p setColor:@"red" Brand:@"audi" Price:1111111];
    [p print];


    Man *man = [[Man alloc] init];
    Woman *woman =[[Woman alloc] init];


    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值