// Student.h
#import <Foundation/Foundation.h>
// 告诉编译器@class后的字符串作为类名使用,并未导入类的接口内容
// #import "AudiCar.h"
// 用@class可以处理嵌套导入的问题,把要引入的类当成一个已经存在的类来使用, 不导入接口内容
@class Student;
@interface Student :NSObject
//
{
NSString *_stuName;
NSString *_stuHobby;
NSInteger _stuAge;
CGFloat _stuScore;
NSString *_stuSex;
// Student stu; //并未导入类的接口内容
}
// +号方法是类来调用,所以管+号方法叫类方法, -号方法是由类实例出来的对象来调用, 也管-号方法叫实例方法
- (void)sayHi;
- (void)printStr:(NSString *)str printNum:(NSInteger)num;
// 成员变量可见度变成被保护之后,无法外部进行赋值, 取值操作,所以只能通过方法来实现赋值和取值, 对应setter和 getter 方法
// 设置器就是对成员变量进行赋值操作 setter方法
// setter方法名规范, set + 去掉下划线的成员变量名
- (void)setStuName:(NSString *)stuName;
- (void)setStuHobby:(NSString *)stuHobby;
- (void)setStuAge:(NSInteger)stuAge;
- (void)setStuScore:(CGFloat)stuScore;
- (void)setStuSex:(NSString *)stuSex;
// 对成员变量进行取值 getter方法
// getter方法的命名:不用加get, 直接用去掉下划线的成员变量名
- (NSString *)stuName;
- (NSString *)stuHobby;
- (NSInteger)stuAge;
- (CGFloat)stuScore;
- (NSString *)stuSex;
// 每一个成员变量对应一个设置器和一个访问器,他们成对出现
// 只有对一个成员变量赋值的方法,我们管它叫设置器, 对多个成员变量赋值,称为赋值语句
// 对多个成员变量进行赋值
- (void)setStuName:(NSString *)stuName
stuSex:(NSString *)stuSex
stuAge:(NSInteger)stuAge
stuScore:(CGFloat)stuScore
stuHobby:(NSString *)stuHobby;
// 自定义的初始化方法
// 自定义初始化方法一定要 - init 开头, 后面接With
// with之后可以把要初始化的部分接在后面
- (id)initWithStuName:(NSString *)stuName;
// 对五个成员变量进行赋值操作
- (id)initWithStuName:(NSString *)stuName
stuAge:(NSInteger)stuAge
stuHobby:(NSString *)stuHobby
stuSex:(NSString *)stuSex
stuScore:(CGFloat)stuScore;
@end
// Student.m 文件
//**********************************************************************
#import "Student.h"
@implementation Student
// 类的内部从@implementation开始,到@end结束,在内部类可以使用任意可见度的成员变量
- (void)sayHi {
NSLog(@"%@ %@ %ld %g %@",_stuName, _stuHobby,_stuAge, _stuScore,_stuSex);
}
//
- (void)printStr:(NSString *)str printNum:(NSInteger)num {
NSLog(@"%@%ld", str, num);
}
/setter方法 设置器
- (void)setStuName:(NSString *)stuName {
_stuName = stuName;
}
//
- (void)setStuHobby:(NSString *)stuHobby {
_stuHobby = stuHobby;
}
//
- (void)setStuAge:(NSInteger)stuAge {
_stuAge = stuAge;
}
//
- (void)setStuScore:(CGFloat)stuScore {
_stuScore = stuScore;
}
//
- (void)setStuSex:(NSString *)stuSex {
_stuSex = stuSex;
}
/ getter方法 访问器
- (NSString *)stuName {
return_stuName;
}
//
- (NSString *)stuHobby {
return_stuHobby;
}
//
- (NSInteger)stuAge {
return_stuAge;
}
//
- (CGFloat)stuScore {
return_stuScore;
}
//
- (NSString *)stuSex {
return_stuSex;
}
// 对多个成员变量进行赋值
- (void)setStuName:(NSString *)stuName
stuSex:(NSString *)stuSex
stuAge:(NSInteger)stuAge
stuScore:(CGFloat)stuScore
stuHobby:(NSString *)stuHobby {
_stuSex = stuSex;
_stuScore = stuScore;
_stuName = stuName;
_stuHobby = stuHobby;
_stuAge = stuAge;
}
// 初始化方法
- (id)init {
_stuAge = 20;
_stuName = @"师傅";
return self;
}
// 自定义的初始化方法
- (id)initWithStuName:(NSString *)stuName {
_stuName = stuName;
return self;
}
// 自定义的初始化方法
- (id)initWithStuName:(NSString *)stuName
stuAge:(NSInteger)stuAge
stuHobby:(NSString *)stuHobby
stuSex:(NSString *)stuSex
stuScore:(CGFloat)stuScore {
_stuName = stuName;
_stuScore = stuScore;
_stuHobby = stuHobby;
_stuSex = stuSex;
_stuAge = stuAge;
return self;
}
@end
// AudiCar.h 文件
//*****************************************************************
#import <Foundation/Foundation.h>
@interface AudiCar : NSObject
{
NSString *_name;
NSString *_model;
NSInteger _seat;
}
// 方法
// setter 设置器
- (void)setName;
- (void)setModel;
- (void)setSeat;
// getter 访问器
- (NSString *)getName;
- (NSString *)getModel;
- (NSInteger)getSeat;
// 自定义初始化方法
- (id)initWithName:(NSString *)name
model:(NSString *)model
seat:(NSInteger)seat;
@end
// AudiCar.m
//*************************************************************
#import "AudiCar.h"
@implementation AudiCar
// setter 设置器
- (void)setName {
_name = @"奥迪";
}
//
- (void)setModel {
_model = @"A6";
}
//
- (void)setSeat {
_seat = 4;
}
//
// getter 访问器
- (NSString *)getName {
return _name;
}
//
- (NSString *)getModel {
return _model;
}
//
- (NSInteger)getSeat {
return _seat;
}
///
// 自定义初始化方法
- (id)initWithName:(NSString *)name
model:(NSString *)model
seat:(NSInteger)seat {
_name = name;
_model = model;
_seat = seat;
return self;
}
@end
// main.m 文件
//***************************************************************
#import <Foundation/Foundation.h>
#import "Student.h"
#import "AudiCar.h"
typedefNS_ENUM(NSInteger, NSXiYouJi) {
tangseng =4 >> 4,
wukong =5 << 1,
bajie =3 << 2,
shaseng =1 << 3
};
int main(int argc,const char * argv[]) {
// Student *stu = [[Student alloc] init];
// 调用方法
//[stu printStr:@"孙悟空" printNum:10];
//方法名会在方法调用的时候会使用
//形参的名会在声明和方法的实现的时候会用
//只要有一个参数, 就要有一个冒号相对应,冒号不能省略
// [stu setStuName:@"孙悟空"];
// [stu setStuHobby:@"降妖除魔"];
// [stu setStuAge:500];
// [stu setStuSex:@"雄性"];
// [stu setStuScore:100];
// [stu sayHi];
// NSLog(@"%@", [stu stuName]);
// Student *stu = [[Student alloc] init];
// [stu setStuName:@"孙悟空" stuSex:@"男" stuAge:500 stuScore:80 stuHobby:@"降妖除魔"];
// NSLog(@"%@, %ld, %@, %g, %@", [stu stuName], [stu stuAge], [stu stuHobby], [stu stuScore], [stu stuSex]);
// 断点调试 + po检测
// 创建一个对象
// Student *stu = [[Student alloc]initWithStuName:@"八戒"];
// NSLog(@"%@", [stu stuName]);
// Student *stu1 = [[Student alloc] initWithStuName:@"菩萨"];
// NSLog(@"%@", [stu1 stuName]);
// Student *stu2 = [[Student alloc] initWithStuName:@"小田田" stuAge:21 stuHobby:@"女" stuSex:@"尼玛" stuScore:100];
// [stu2 sayHi];
// 上述形式为消息机制
// 练习
// AudiCar *audi = [[AudiCar alloc] initWithName:@"宝马" model:@"X3" seat:4];
// NSLog(@"%@", [audi getName]);
// NSLog(@"%@", [audi getModel]);
// NSLog(@"%ld", [audi getSeat]);
// [audi setName];
// [audi setModel];
// [audi setSeat];
// NSLog(@"%@", [audi getName]);
// NSLog(@"%@", [audi getModel]);
// NSLog(@"%ld", [audi getSeat]);
// 练习
NSLog(@"%ld",tangseng);
NSLog(@"%ld",wukong);
NSLog(@"%ld",bajie);
NSLog(@"%ld",shaseng);
return 0;
}