1、类与对象
1.1定义带有多个带有形参的方法
1.2访问权限
1.2.1属性(4种)
1.2.2方法(2种)
#import <Foundation/Foundation.h>
@interface SHExample : NSObject
{
int _i0;//_i0的访问权限是保护的,默认状态
@public
int _i1;//_i1的访问权限是公有的。一般不建议使用
@package
int _i2;//_i2的访问权限是包内的。
@protected
int _i3;//_i3的访问权限是保护的
@private
int _i4;//_i4的访问权限是私有的
}
-(void)method;
@end
#import "SHExample.h"
@implementation SHExample
{
@public//在此处,该关键字不起作用
int _i5;//私有的
}
-(void)method
{
[self privateMethod];
NSLog(@"这是一个公有方法");
}
-(void)privateMethod//在interface中没有声明,直接写出方法的函数体属于私有方法
{
NSLog(@"这是一个私有的方法");
}
@end
main函数:
#import <Foundation/Foundation.h>
#import "SHExample.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
SHExample *e = [SHExample alloc];
//e->_i0 = 10;//保护的
e->_i1 = 20;//公有的
NSLog(@"%d", e->_i1);
e->_i2 = 30;//包内的
NSLog(@"%d", e->_i2);
//e->_i3 = 40;//保护的
//e->_i4 = 50;//私有的
//e->_i5 = 60;//私有的
[e method];//method是公有方法
//[e privateMethod];//privateMethod是私有方法
}
return 0;
}
1.3属性:由关键字(property)自动生成的,成员变量的声明+setter+getter
SHFraction类:
#import <Foundation/Foundation.h>
@interface SHFraction : NSObject
{
int _n;
int _d;
}
@property int n;
//-(void)setN:(int)n;
//-(int)n;
@property int d;
//-(void)setD:(int)d;
//-(int)d;
-(void)show;
@end
#import "SHFraction.h"
@implementation SHFraction
@synthesize n = _n;
//-(void)setN:(int)n
//{
// _n = n;
//}
//-(int)n
//{
// return _n;
//}
@synthesize d = _d;
//-(void)setD:(int)d
//{
// _d = d;
//}
//-(int)d
//{
// return _d;
//}
-(void)show
{
NSLog(@"%d/%d", _n, _d);
}
@end
SHFraction1类:
#import <Foundation/Foundation.h>
@interface SHFraction1 : NSObject
//{//iOS5.0以后自动生成成员变量的声明
// int _n;
// int _d;
//}
@property int n;
@property int d;
-(void)show;
@end
#import "SHFraction1.h"
@implementation SHFraction1
@synthesize n;
@synthesize d;
-(void)show
{
NSLog(@"%d/%d", n, d);
}
@end
SHFraction2类:
#import <Foundation/Foundation.h>
@interface SHFraction2 : NSObject
@property int n;
@property int d;
-(void)show;
@end
#import "SHFraction2.h"
@implementation SHFraction2
//@synthesize n;//iOS6.0以后省略
//@synthesize d;
-(void)show
{
NSLog(@"%d/%d", self.n, self.d);
}
@end
SHFraction3类:
#import <Foundation/Foundation.h>
@interface SHFraction3 : NSObject
@property int n;
@property int d;
@property(readonly) double value;
-(void)show;
@end
#import "SHFraction3.h"
@implementation SHFraction3
-(double)value
{
return self.n * 1.0 / self.d;
}
-(void)show
{
NSLog(@"%d/%d", self.n, self.d);
}
@end
创建一个SHTeacher类:
SHTeacher.h
#import <Foundation/Foundation.h>
@interface SHTeacher : NSObject
{
//姓名、所在系、所教课程
NSString *_name;
NSString *_department;
NSString *_course;
}
//有一个show方法
-(void)setName:(NSString*)name;
-(NSString*)name;
-(void)setDepartment:(NSString*)department;
-(NSString*)department;
-(void)setCourse:(NSString*)course;
-(NSString*)course;
-(void)show;
-(void)setName:(NSString *)name andDepartment:(NSString*)department andCourse:(NSString*)course;
@end
SHTeacher.m
#import "SHTeacher.h"
@implementation SHTeacher
-(void)setName:(NSString *)name
{
_name = name;
}
-(NSString *)name
{
return _name;
}
-(void)setDepartment:(NSString *)department
{
_department = department;
}
-(NSString *)department
{
return _department;
}
-(void)setCourse:(NSString *)course
{
_course = course;
}
-(NSString *)course
{
return _course;
}
-(void)show
{
NSLog(@"姓名:%@,所在系:%@,所教课程:%@", _name, _department, _course);
}
-(void)setName:(NSString *)name andDepartment:(NSString *)department andCourse:(NSString *)course
{
_name = name;
_department = department;
_course = course;
}
@end
创建一个SHStudent类:
SHStudent.h
#import <Foundation/Foundation.h>
@interface SHStudent : NSObject
{
//姓名、年龄、学号、家庭住址
NSString *_name;
int _age;
int _ID;
NSString *_address;
}
//有一个show方法
-(void)setName:(NSString*)name;//有一个形参的方法
-(NSString*)name;//无参方法
-(void)setAge:(int)age;
-(int)age;
-(void)setID:(int)ID;
-(int)ID;
-(void)setAddress:(NSString*)address;
-(NSString*)address;
-(void)show;
-(void)setName:(NSString *)name andAge:(int)age;//有两个形参的方法
-(void)setName:(NSString *)name andAge:(int)age andID:(int)ID andAddress:(NSString*)address;//有四个形参的方法
@end
SHStudent.m
#import "SHStudent.h"
@implementation SHStudent
-(void)setName:(NSString *)name
{
_name = name;
}
-(NSString *)name
{
return _name;
}
-(void)setAge:(int)age
{
_age = age;
}
-(int)age
{
return _age;
}
-(void)setID:(int)ID
{
_ID = ID;
}
-(int)ID
{
return _ID;
}
-(void)setAddress:(NSString *)address
{
_address = address;
}
-(NSString *)address
{
return _address;
}
-(void)show
{
NSLog(@"姓名:%@,年龄:%d,学号:%d,家庭住址:%@", _name, _age, _ID, _address);
}
-(void)setName:(NSString *)name andAge:(int)age
{
_name = name;
_age = age;
}
-(void)setName:(NSString *)name andAge:(int)age andID:(int)ID andAddress:(NSString *)address
{
_name = name;
_age = age;
_ID = ID;
_address = address;
}
@end
思考练习:
创建一个教室类
四个属性:名字、桌子的张数、椅子的把数、电脑的台数
方法:
显示该教室的所有属性
判断教室能否使用,这个教室的椅子数是不是大于等于桌子数
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
解析:
#import <Foundation/Foundation.h>
@interface SHClassroom : NSObject
@property NSString *name;
@property int table;
@property int chair;
@property int computer;
-(void)show;
-(BOOL)isTableWithChair;
@end
#import "SHClassroom.h"
@implementation SHClassroom
-(void)show
{
NSLog(@"教室名称:%@,桌子数:%d,椅子数:%d,电脑数:%d", self.name, self.table, self.chair, self.computer);
}
-(BOOL)isTableWithChair
{
return self.chair >= self.table;
}
@end
#import <Foundation/Foundation.h>
#import "SHClassroom.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
SHClassroom *c = [SHClassroom alloc];
c.name = @"第一教室";
c.table = 20;
c.chair = 10;
c.computer = 20;
[c show];
NSLog(@"%@使用能力为:%@", c.name, [c isTableWithChair]?@"具备":@"不具备");
}
return 0;
}