#import <Foundation/Foundation.h>
@interface Book : NSObject
{
NSString *_name;
float _price;
}
//构造方法也叫初始化方法:初始化alloc创建的对象,把对象清0,给对象的实例变量赋值;
//带参数的构造方法必须以 initWithXXX 开头, w必须大写
//不带参数
- (id)init;
//带一个参数
- (id)initWithName:(NSString *)name;
- (id)initWithPrice:(float)price;
//带有两个参数
- (id)initWithName:(NSString *)name andPrice:(float)price;
//类方法创建对象
//不带参数的类方法
+ (id)bookCreat;
+ (id)bookCreatWithName:(NSString *)name;
+ (id)bookCreatWithName:(NSString *)name andPrice:(float)price;
//getter方法
- (NSString *)name;
- (float)price;
@end
@implementation Book
//实例方法,给类的实例调用
//self在实例方法中,指向类的实例(调用者)
- (id)init
{
self = [super init];//super是编译器符号,通过super关键字可以调用父类的方法
//先初始化父类的实例变量
if(self)//判断父类的实例变量是否初始化成功
{
//初始化自定义实例变量
_name = @"三国";
_price = 34.50;
}
return self;
}
- (id)initWithName:(NSString *)name
{
self = [super init];
if (self) {
_name = name;
}
return self;
}
- (id)initWithPrice:(float)price
{
if (self = [super init]) {
_price = price;
}
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 alloc] init];
return book;
}
+ (id)bookCreatWithName:(NSString *)name
{
//self在类方法里面,代表的是当前类
return [[self alloc] initWithName:name];
}
+ (id)bookCreatWithName:(NSString *)name andPrice:(float)price
{
//return [[self alloc] initWithName:name andPrice:price];
id book = [[self alloc] init];
((Book *)book)->_name = name;
((Book *)book)->_price = price;
return book;
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Book *book1 = [[Book alloc] init];
NSLog(@"bookName = %@, price = %.2f", [book1 name], [book1 price]);
Book *book2 = [[Book alloc] initWithName:@"红楼梦" andPrice:54.60];
NSLog(@"bookname = %@, price = %.2f", [book2 name], [book2 price]);
//创建的对象只能使用一次构造方法,不能对创建的对象同时使用多个构造方法
//类方法创建出的对象不需要再调用构造方法进行初始化
//类方法只能给类本身调用,不能给类的实例调用
Book *book3 = [Book bookCreat];
NSLog(@"bookname = %@, price = %.2f", [book3 name], [book3 price]);
Book *book4 = [Book bookCreatWithName:@"百年孤独"];
NSLog(@"bookname = %@, price = %.2f", [book4 name], [book4 price]);
Book *book5 = [Book bookCreatWithName:@"百年孤独" andPrice:23.6];
NSLog(@"bookname = %@, price = %.2f", [book5 name], [book5 price]);
}
return 0;
}