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