您的位置:首页 > 移动开发 > Objective-C

OC中的成员变量

2015-11-13 00:44 316 查看
//

//  main.m

//  第一个OC类 访问成员变量的若干方法的解析

//

//  Created by Caoxia on 15/11/10.

//  Copyright © 2015年 Caoxia. All rights reserved.

//

#import <Foundation/Foundation.h>

/*使用_访问成员变量的注意点

 一.使用 _成员变量名对成员变量进行访问

 

 在方法中,可以使用 "_成员变量名"对本对象中的成员变量进行访问。

 

 注意点:

 

 1>成员变量必须是本对象中的成员变量

 

 2>如果成员变量是从父类中继承而来,而且父类中的此成员变量被设置为@private时,不可以用这种方式。

 

 3>可以与&取址符搭配使用

 */

//---------------------------------------------华丽的分割线-----------------------------------------------

@interface person :
NSObject

{

    

   
//只有简单的成员变量的声明,没有方法的声明

    @private

    int _age;

    @protected //默认类型是protected

    double _weight;

    @public

    double _height;

}

- (void)test;

@end

@implementation person

- (void)test

{

    _age = 16;

    NSLog(@"%i",_age);// 分界线里面是一个类,在本类中访问,无论是public,private,protected修饰都是可以访问的

    

    _weight = 55.5;

    NSLog(@"%f",_weight);//这里的访问方式是直接进行访问,没有实例化对象访问

    

    _height = 178.5;

    NSLog(@"%f",_height);

}

@end

@interface Mother :
NSObject

{

    @public

    int _age;

    double _weight;

    NSString *_name;

}

@end

@implementation Mother

- (void)say

{

    _age = 18;

    NSLog(@"%d,%f,%@",_age,_weight,_name);
  //double类型用%f

}

@end

//---------------------------------------------华丽的分割线-----------------------------------------------

//注意,主函数和上面的Person类不是一个类,即使写在一个文件里也不是一个函数

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

    @autoreleasepool {

        // insert code here...

       // NSLog(@"Hello, World!");

        

        //NSLog(@"%d",_age);    //成员变量必须创建一个对象以后才可以使用

        person *p = [[personalloc]init];

        

//        NSLog(@"%d",p->_age);   //在没有赋值的时候,相当于是获取,初始化为0,所以打印结果为0

//        

//        person *p2 = [person new];

//        p2->_age = 13;        //给成员变量赋值,但是要区分于set方法,只有创建了对象才可以这样用

//        NSLog(@"%d",p2->_age);   //age是私有的,在别的类中不能访问

        

        

       
//总结,在这种情况下,只能用@public修饰才能访问,其它方式都不能访问

        

        

        

        //NSLog(@"%d",p2.age);    //这里是没有办法进行访问的,因为点语法的实质就是set方法(setter)和get方法(getter),\

                                   
有两种方式设置setter和getter,分别是1.自定义setter和getter,然后在里面写实现,\

                                   
另一种是使用@property,自动生成最简单的setter和getter,这一点会在后面提到.

        

        Mother *mom = [Mothernew];

        mom->_age =
13;

        mom->_name =
@"腊梅";

        mom->_weight =
55;

        [mom say];  //打印结果 18,55.000000,腊梅,因为最后是调用say方法,say以后_age的值被更改了

//---------------------------------------------华丽的分割线-----------------------------------------------

       
//oc中类的本质就是一个结构体,所以实例化对象,然后使用指针指向,实际上就是一个结构体的指向

        

        struct People

        {

            int age;

            double weight;

            char *name;

        };

        structPeople p1; //相当于定义了一个
struct People数据类型的变量

        struct People *point = &p1;  //定义一个指针指向这个变量的实际内存地址

        (*point).age =
15;

        (*point).weight =
65.5;

        (*point).name =
"haha";

        

        printf("%d,%f,%s",point->age,point->weight,point->name);

//---------------------------------------------华丽的分割线-----------------------------------------------

        

        

    }

    return 0;

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