OC班级类

//
//  MyClass.h
//  OC2_班级类
//
//  Created by zhangxueming on 15/6/12.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"

@interface MyClass : NSObject
{
    NSString * _className;
    NSMutableArray * _stuList;
}

- (id)initWithClassName:(NSString *)name;
- (void)setClassName:(NSString *)name;
- (NSString*)className;
- (void)addStudent:(Student *)student;
- (void)addStudent:(Student *)student atIndex:(NSInteger) index;
- (void)removeStudent:(Student *)student;
- (void)removeStudentAtIndex:(NSInteger) index;
- (void)replaceStudent:(Student *)student atIndex:(NSInteger) index;
- (void)showStuList;
- (void)sortedByNumber;//按照学号升序
- (void)sortedByScore;//按照分数降序
- (void)sortedByName;//按照名字降序

+ (void)testMyClass;

@end
//
//  MyClass.m
//  OC2_班级类
//
//  Created by zhangxueming on 15/6/12.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import "MyClass.h"

@implementation MyClass

- (id)initWithClassName:(NSString *)name
{
    if (self = [super init]) {
        _className = name;
        _stuList = [NSMutableArray array];
    }
    return self;
}
- (void)setClassName:(NSString *)name
{
    _className = name;
}

- (NSString*)className
{
    return _className;
}

- (void)addStudent:(Student *)student
{
    if (![_stuList containsObject:student]) {
        [_stuList addObject:student];
    }
}

- (void)addStudent:(Student *)student atIndex:(NSInteger) index
{
    [_stuList insertObject:student atIndex:index];
}

- (void)removeStudent:(Student *)student
{
    [_stuList removeObject:student];
}

- (void)removeStudentAtIndex:(NSInteger) index
{
    [_stuList removeObjectAtIndex:index];
}

- (void)replaceStudent:(Student *)student atIndex:(NSInteger) index
{
    [_stuList replaceObjectAtIndex:index withObject:student];
}

//遍历学生数组
- (void)showStuList
{
    for (Student *stu in _stuList) {
        [stu printStudent];
    }
}

- (void)sortedByNumber//按照学号升序
{
    [_stuList sortUsingSelector:@selector(isSortByNum:)];
}
- (void)sortedByScore//按照分数降序
{
    [_stuList sortUsingSelector:@selector(isSortByScore:)];
}
- (void)sortedByName//按照名字降序
{
    [_stuList sortUsingSelector:@selector(isSortByName:)];
}

+ (void)testMyClass
{
    MyClass *ios1509 = [[MyClass alloc] initWithClassName:@"ios1509"];
    for  (NSInteger i=0; i<10; i++) {
        Student *stu = [[Student alloc] initWithName:[NSString stringWithFormat:@"name%d", arc4random()%50+1] number:arc4random()%100+1 score:arc4random()%101];
        [ios1509 addStudent:stu];
    }
    NSLog(@"排序前");
    [ios1509 showStuList];

    NSLog(@"分数排序后");
    [ios1509 sortedByScore];
    [ios1509 showStuList];

    NSLog(@"学号排序后");
    [ios1509 sortedByNumber];
    [ios1509 showStuList];

    NSLog(@"名字排序后");
    [ios1509 sortedByName];
    [ios1509 showStuList];
}

@end
//
//  Student.h
//  OC2_班级类
//
//  Created by zhangxueming on 15/6/12.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Student : NSObject
{
    NSString * _name;
    NSInteger _num;
    NSInteger _score;
}

- (id)initWithName:(NSString *)name number:(NSInteger)num score:(NSInteger)score;
- (void)setName:(NSString *)name;
- (NSString *)name;
- (void)setNum:(NSInteger)num;
- (NSInteger)num;
- (void)setScore:(NSInteger)score;
- (NSInteger)score;

- (BOOL)isSortByScore:(Student *)aStudent;
- (BOOL)isSortByNum:(Student *)aStudent;
- (NSComparisonResult)isSortByName:(Student *)aStudent;

- (void)printStudent;

@end
//
//  Student.m
//  OC2_班级类
//
//  Created by zhangxueming on 15/6/12.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import "Student.h"

@implementation Student

- (id)initWithName:(NSString *)name number:(NSInteger)num score:(NSInteger)score
{
    if(self = [super init])
    {
        _name = name;
        _num = num;
        _score = score;
    }
    return self;
}
- (void)setName:(NSString *)name
{
    _name = name;
}

- (NSString *)name
{
    return _name;
}

- (void)setNum:(NSInteger)num
{
    _num = num;
}

- (NSInteger)num
{
    return _num;
}

- (void)setScore:(NSInteger)score
{
    _score = score;
}

- (NSInteger)score
{
    return _score;
}

- (BOOL)isSortByScore:(Student *)aStudent
{
    if ([self score]>[aStudent score]) {
        return YES;
    }
    return NO;
}

- (BOOL)isSortByNum:(Student *)aStudent
{
    if ([self num] > [aStudent num]) {
        return YES;
    }
    return NO;
}

- (NSComparisonResult)isSortByName:(Student *)aStudent
{
    return [[self name] compare:[aStudent name]];
}

- (void)printStudent
{
    NSLog(@"name = %@ num = %li score = %li", [self name], [self num], [self score]);
}

@end
//
//  main.m
//  OC2_班级类
//
//  Created by zhangxueming on 15/6/12.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "MyClass.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        //NSLog(@"Hello, World!");
        [MyClass testMyClass];
    }
    return 0;
}
时间: 2024-10-06 23:00:34

OC班级类的相关文章

OC 01 类和对象

一.  定义OC的类和创建OC的对象 接下来就在OC中模拟现实生活中的情况,创建一辆车出来.首先要有一个车子类,然后再利用车子类创建车子对象 要描述OC中的类稍微麻烦一点,分2大步骤:类的声明.类的实现(定义).跟函数类似,函数有分声明和定义 1.     类的声明 1)       代码编写 定义一个Car类,拥有2个属性:轮子数.时速,1个行为:跑 类名\属性的命名规则:标示符的规则 类名的命名规范:有意义.驼峰标识.首字母大写 #import <Foundation/Foundation.

OC 导入类 #import和@class 区别复习

objective-c中#import和@class的区别 在Objective-C中,可以使用#import和@class来引用别的类型, 但是你知道两者有什么区别吗? @class叫做forward-class,  你经常会在头文件的定义中看到通过@class的引用, 原因就是当你只用@class来引入一个类时, 编译器知道有这么一个类,也就是说它能识别Engine *engine; 而在implementation文件中,如果你想要访问engine.price, 编译器就会出错, 即使你用

视频iOS之02第一个OC的类

OC是一门面向对象的语言,因此它也有类.对象.静态\动态方法.成员变量的概念.这讲就来创建第一个OC的类. 第一个类的源码: 1 /* 2 人 3 类名:Person 4 属性(成员变量\实例变量):体重.年龄 5 行为(方法):走路.吃 6 */ 7 8 #import <Foundation/Foundation.h> 9 10 //1.类的声明 11 @interface Person : NSObject 12 { 13 @public 14 int age; 15 double we

OC基础 类的三大特性

OC基础  类的三大特性 OC的类和JAVA一样,都有三大特性:继承,封装,多态,那么我们就来看一下OC中类的三大特性. 1.继承 继承的特点: (1)子类从父类继承了属性和方法. (2)子类独有的属性和方法不能被父类使用. (3)子类独有的属性和方法,不能够在子类之间互相使用. (4)子类能够重写父类的方法,子类调用该方法时:首先调用子类的方法,如果子类没有该方法,就调用父类的该方法. (5)子类对象指针可以转换成父类对象指针,但是父类对象指针不能够转换成子类对象指针. 三种权限变量的继承:

第一个OC的类

[转自]http://www.cnblogs.com/mjios/archive/2013/04/06/3002814.html 本文目录 一.语法简介 二.用Xcode创建第一个OC的类 三.第一个类的代码解析 四.添加成员变量 五.添加方法 六.跟Java的比较 七.创建对象 八.访问公共成员变量和方法 说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序员,能够快速上手Objective-C.如果你还没有编程经验,或者对Objective-C.

OC语言类的本质和分类

OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件结构图: 在分类中添加一个方法 Study方法的实现 测试程序: (二)分类的使用注意 (1)分类只能增加方法(包括类方法和对象方法),不能增加成员变量 (2)在分类方法的实现中可以访问原来类中的成员变量: (3)分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法无法再使用(警

【Objective-C】05-第一个OC的类

OC是一门面向对象的语言,因此它也有类.对象.静态\动态方法.成员变量的概念.这讲就来创建第一个OC的类. 一.语法简介 1.类 在Java中,我们用1个.java文件就可以描述清楚一个类:在OC中,一般用2个文件来描述一个类: 1> .h:类的声明文件,用于声明成员变量.方法.类的声明使用关键字@interface和@end. 注意:.h中的方法只是做一个声明,并不对方法进行实现.也就是说,只是说明一下方法名.方法的返回值类型.方法接收的参数类型而已,并不会编写方法内部的代码. 2> .m:

学习笔记之05-第一个OC的类

一.语法简介 1.类 在Java中,我们用1个.java文件就可以描述清楚一个类:在OC中,一般用2个文件来描述一个类: 1> .h:类的声明文件,用于声明成员变量.方法.类的声明使用关键字@interface和@end. 注意:.h中的方法只是做一个声明,并不对方法进行实现.也就是说,只是说明一下方法名.方法的返回值类型.方法接收的参数类型而已,并不会编写方法内部的代码. 2> .m:类的实现文件,用于实现.h中声明的方法.类的实现使用关键字@implementation和@end. 2.方

黑马程序员-OC的类的构造方法

构造方法:用来初始化对象的:首先分解一下创建对象的过程: Person *p = [Person new]; // new方法是alloc 和 init 这两个方法的组合: 完整的创建可用对象的过程: 1:分配存储空间:  就是调用的  +alloc 方法,这个方法是类方法,返回的是一个分配好存储空间的 对象: 2:初始化:-init 方法,对象方法,由alloc方法返回的对象调用init对对象进行初始化: 所以创建一个对象的规范和常用的方式:  Person *p = [[Person all