创建一个Book类
一 、定义类 Book.h文件
#import <Foundation/Foundation.h>
@interface Book : NSObject {
NSString *_name;
float _price;
}
//构造方法,也称为初始化方法;初始化alloc创建的对象,给对象的实例变量赋初值;
//带参数的构造方法必须以 initWithXXX 开头,W要大写
//无参数构造方法
-(id)init;
//一个参数构造方法
-(id)initWithName:(NSString *)name;
//两个参数公构造方法
-(id)initWithName:(NSString *)name andPrice:(float)price;
-(NSString *)name;
-(float)price;
//类方法的声明
//利用类方法创建对象
+(id)bookCreat;
+(id)bookCreatWithName:(NSString *)name;
+(id)bookCreatWithName:(NSString *)name andPrice:(float)price;
@end
#import "Book.h"
@implementation Book
//- 开头的方法是实例方法,给类的实例调用
//self在实例方法中,指向类的实例(调用者)
-(id)init {
self = [super init]; //super关键字可以调用父类的方法
//先初始化父类的实例变量
if(self) { //判断父类的实例变量是否初始化成功
//在这儿初始化自定义的实例变量
_name = @"三国演义";
_price = 55.0;
}
return self;
}
//调用一个参数构造方法
-(id)initWithName:(NSString *)name {
self = [super init];
if(self) {
_name = name;
}
return self;
}
//调用两个参数构造方法
-(id)initWithName:(NSString *)name andPrice:(float)price {
//也可这样判断父类实例变量是否初始化
if(self = [super init]) {
_name = name;
_price = price;
}
return self;
}
-(NSString *)name {
return _name;
}
-(float)price {
return _price;
}
//类方法的实现
+(id)bookCreat {
//在类方法中创建book对象
Book *book = [[Book alloc] init];
return book;
}
+(id)bookCreatWithName:(NSString *)name {
//self 在类方法中代表当前类本身
return [[self alloc] initWithName:name];
}
+(id)bookCreatWithName:(NSString *)name andPrice:(float)price {
//创建一个book对象
id book = [[self alloc] init];
//将book对象强制转换为Book *类型
((Book *)book)->_name = name;
((Book *)book)->_price =price;
return book;
}
@end
#import <Foundation/Foundation.h>
#import "Book.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Book *book1 = [[Book alloc] init];
NSLog(@"name = %@, price = %.2f", [book1 name], [book1 price]);
/* name = 三国演义, price = 55.00 */
Book *book2 = [[Book alloc] initWithName:@"西游记" andPrice:62.0];
NSLog(@"name = %@, price = %.2f,", [book2 name], [book2 price]);
/* name = 西游记, price = 62.00, */
//创建的对象只能使用一次构造方法
//类方法创建了对象,不需要再调用构造方法进行初始化
//类方法只能给类本身调用
Book *book3 = [Book bookCreat];
NSLog(@"书名 = %@, 价格 = %.2f", [book3 name ],[book3 price]);
/* 书名 = 三国演义, 价格 = 55.00 */
Book *book4 = [Book bookCreatWithName:@"三国杀"];
NSLog(@"游戏名 = %@, 价格 = %.2f", [book4 name], [book4 price]);
/* 游戏名 = 三国杀, 价格 = 0.00 */
Book *book5 = [Book bookCreatWithName:@"狼人杀" andPrice:52.0];
NSLog(@"游戏名 = %@, 价格 = %.2f", [book5 name], [book5 price]);
/* 游戏名 = 狼人杀, 价格 = 52.00 */
}
return 0;
}