您的位置:首页 > 其它

实例变量可见度和方法(setter,getter 方法)

2015-11-24 22:43 405 查看
          //

 

一、

// main.m

// OC相对于C来说进行了一个优化,  #import 相对于 #include 来说:可以防止重复导入头文件引起的编译错误

//#import"AudiCar.h"

//#import"AudiCar.h"      //不报错

 

//#include"AudiCar.h"

//#include"AudiCar.h"    //报错

 

 

#import<Foundation/Foundation.h>

#import"Person.h"

#import"AudiCar.h"

#import"MobilePhone.h"

intmain(intargc, const char * argv[]) {

    @autoreleasepool {

//        Person *person = [[Personalloc]init];       

//         //  用 ->访问  @public 修饰的实例变量

//        person->_name = @"ylc";

//       NSLog(@"%@",person->_name);      

////  实例变量没用 @public 修饰, 不能这样访问

////  一般不用 @public 修饰,因为违背了面向对象的封装特性

     

//        //赋值方法

//        [personsetName:@"jh"];

//        NSLog(@"%@",[personname]);       

//        //多参数的赋值方法

//        [personsetName:@"fdji"gender:@"m" age:33 weight:290];

 

//        AudiCar *audicar =[[AudiCaralloc]init];

//        MobilePhone *mobilephone =[[MobilePhonealloc]init];   

//        [audicar setBrand:@"Audi"color:@"red" price:100];

//        [audicar run];

//    NSLog(@"%@ %@ %i",[audicarbrand],[audicar color],[audicar price]);

//               

//        [mobilephonesetBrand:@"apple"size:5 price:300];

//        [mobilephone show];

//        NSLog(@"%@ %i%i",[mobilephone brand],[mobilephone size],[mobilephone price]);

 

        // self = [superinitWithBrand:@"kd" price:1111 color:@"red"];

        // 若initWithBrand中的 W 改写成小写后,会发生错误。

            // 不完全初始化方法

       // [audiinitWithBrand:@"fedora"price:1000 color:@"red"];

NSLog(@"%@%@ %i",[audi brand],[audi color],[audi price]);

        // 方法的使用(方法的调用)

        //  [消息的接受者方法名]

//        如果是对象(-)方法,消息接受者为对象

//        如果是类(+)方法,消息接受者为类名

        // 有参数,给参数,无参数,不给

//        有返回值定义相同类型的变量接收

//        无返回值不接收

    }

return0;

}

 

//  Person.h

#import<Foundation/Foundation.h>

 

@interface Person : NSObject

{

int _weight;

   @public

NSString *_name;

   @protected

NSString *_gender;

   @private

int _age;

 

   //  实例变量可见度

      // 用 @public 修饰无论哪一个类都可以访问

      // 用 @protected 修饰只有当前类和子类可以访问

      // 用 @private 修饰只有当前类可以访问

      //  用 @package 修饰与框架有关,几乎不用

      //  如果没有写修饰词,默认为@protected

}

 

// 方法名和变量名命名规范: 第一个单词首字母小写,第二个单词首字母大写

// 类名每个单词的首字母大写

// void 代表返回值

// NSString * 代表参数类型

// NSString * 后面的name代表参数名

// NSString *  前面的Name代表参数形容词

// 方法名: 去掉方法类型,去掉返回值类型,去掉参数以及参数类型

// 方法名为:   setName:

//  赋值方法 setter

- (void)setName:(NSString *)name;

- (void)setGender:(NSString *)gender;

- (void)setAge:(int) age;

- (void)setWeight:(int)weight;

 

// 取值方法 getter

- (NSString *)name;

- (NSString *)gender;

- (int)age;

- (int)weight;

 

//- (void)setValue:(id)valueforKey:(NSString *)key;

// 方法名:  setValue: forKey:

 

// 多参数的赋值方法

- (void)setName:(NSString *)namegender:(NSString *)gender age:(int)age weight:(int)weight;

- (instancetype)initWithName:(NSString*)name gender:(NSString *)gender age:(int)age weight:(int)weight;

 

@end

 

 

 

  //Person.m

#import "Person.h"

 

@implementation Person

// 重写init方法

- (instancetype)init{

   _name = @"dfj";

   _age = 123;

   _gender = @"m";

   _weight = 123;

return self;

}

 

- (void)setName:(NSString *)name{

   _name = name;

}

 

- (void)setGender:(NSString *)gender{

   _gender = gender;

}

 

- (void)setAge:(int)age{

   _age = age;

}

 

- (void)setWeight:(int)weight{

   _weight = weight;

}

 

- (NSString *)name{

return _name;

}

 

- (NSString *)gender{

return _gender;

}

 

- (int)age{

return _age;

}

 

- (int)weight{

return _weight;

}

 

// 多参数的赋值方法实现

- (void)setName:(NSString *)namegender:(NSString *)gender age:(int)age weight:(int)weight{

   _name = name;

   _gender = gender;

   _age = age;

   _weight = weight;

}

 

// 初始化方法

- (instancetype)initWithName:(NSString*)name gender:(NSString *)gender age:(int)age weight:(int)weight{

    _name = name;

    _gender = gender;

    _age = age;

    _weight = weight;

return self;

}

@end

二、

//  A.h

#import<Foundation/Foundation.h>

//# import "B.h"

 

// @class 防止循环导入头文件引起的错误,(A导入B,B导入A就构成循环导入错误)

// 跟在 @class 后面的字符串作为类名使用,不引入B.h的任何东西。

// 一般不在 .h 文件中导入头文件,否则有可能因为循环导入引起的编译错误,所以一般在.m文件中导入有文件.(若在A.h文件中导入B.h,B.h中导入A.h,就会引起循环导入错误)

@class B;

 

@interface A : NSObject

{

    B*_b;

}

@end

 

//  A.m

#import "A.h"

#import "B.h"

@implementation A

 

@end

 

 

//B.h

#import<Foundation/Foundation.h>

// import "A.h"

// 跟在 @class 后面的字符串作为类名使用,不引入A.h的任何东西。

@class A;

@interface B : NSObject

{

    A*_a;

}

@end

 

//  B.m

#import "B.h"

#import "A.h"

 

@implementation B

 

@end

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class