object 知识总结(案例学习)

Person.h


#import <Foundation/Foundation.h>


@interface Person : NSObject

{

    NSString * name;

    int age;

}

-(id)initWithNameAndAge:(NSString*)aName andAge:(int)aAge;  //类初始化构造方法

-(NSString *) getName;

-(void)name:(NSString *)aName;

-(int)getAge;

-(void)age:(int)aAge;

-(void) print;

@end


 
Person.m


#import "Person.h"


@implementation Person

    - (id)init  //初始化方法使用

    {

        if (self= [super init])

        {

            name = nil;

            age = 0;

        }

        

        return self;

    }


    -(id)initWithNameAndAge:(NSString*)aName andAge:(int)aAge  //多参数传值

    {

        if (self= [super init])

        {

            name = aName;

            age= aAge;

        }

        

        return self;

    }


    -(NSString *) getName{

        return name;

    }

    -(void)name:(NSString *)aName{

        if (name!=aName) {

            [aName retain];  //内存管理

            [name release];

            name = aName;

        }

       

    }

    -(int)getAge{

        return age;

    }

    -(void)age:(int) aAge{

        age = aAge;

    }

    -(void) print{

        

        NSLog(@"名字是:%@,年龄是:%d",name,age);

    }


    -(void) dealloc  //销毁方法使用

    {

        [name release];  //销毁对象的时候发送release消息给name

        [super dealloc];

    }

@end






#import <Foundation/Foundation.h>

#import "Person.h"

@interface Student : Person

{

@private    //访问限定

    float math;       //数学科目的成绩

    float english;    //英语科目的成绩

    NSMutableArray *  courses;     //NSMutableArray可变数组的使用

    

}

@property float math;  //属性的使用

@property float english;


-(id)initWithProperty:(NSString *)aName age:(int)aAge math:(float)aMath english:(float)scoreEnglish courseArray:(NSMutableArray *) array;

-(NSMutableArray *)getCourses;

-(void) courses:(NSMutableArray *) array;

-(void) print;//继承与多态  重写

@end





#import "Student.h"

@implementation Student

@synthesize math;

@synthesize english;


- (id)init

{

    if (self = [super init])

    {

        name =@"写哈娜";    //成员变量直接赋值

        [self age:20];    //调用父类的方法赋值

        math = 0;

        english = 0;

        courses = nil;

    }

    

    return self;

}


-(id)initWithProperty:(NSString *)aName age:(int) aAge  math:(float)aMath english:(float)scoreEnglish courseArray:(NSMutableArray *) array;

{

    if (self  = [super init])

    {

        [aName retain];

        [name release];

        name = aName;

        age =aAge;

        math = aMath;

        english = scoreEnglish;

        courses = array;

    }

    

    return self;

}


-(NSMutableArray *)getCourses{

    return courses;

    

}


-(void) courses:(NSMutableArray *) array{

    [array retain];

    [courses release];

    courses = array;

}


-(void) print{//继承与多态  重写

    NSLog(@"我是学生,我继承了person类,重写了print方法");

    NSLog(@"我的名字是:%@,年龄是:%d\n",name,age);

    NSLog(@"数学成绩%f,英语成绩%f",math,english);

    NSEnumerator *enumerator = [courses objectEnumerator];

    id obj;

    while(obj = [enumerator nextObject]){

        NSLog(@"%@\n",[obj description]); //嵌套使用C和使用 枚举类 NSEnumerator

    }

}


-(void) dealloc

{

    [name release];

    [courses release];  //销毁对象的时候发送release消息给NSMutableArray

    [super dealloc];

}

@end



Student+privateSay.h


#import "Student.h"


@interface Student (privateSay)

  -(void) privateSay;

@end


#import "Student+privateSay.h"


@implementation Student (privateSay)

    -(void) privateSay{

        NSLog(@"这是学生的类别方法");

    }

@end




#import <Foundation/Foundation.h>


//协议一

@protocol sayPrint<NSObject>

@optional

-(void) sayHello;

@required

-(void) sayPrint;

@end


//协议二

@protocol sayPrint2<NSObject>

@optional

-(void) sayHello2;

@required

-(void) sayPrint2;

@end




Teacher.h


#import "Person.h"

#import "sayPrint.h"

@interface Teacher : Person<sayPrint,sayPrint2> {//实现协议

    NSString * number;

}

    @property(retain) NSString * number;  //属性的使用

    -(id)initWithNumber:(NSString*)aNumber;

   

@end





#import "Teacher.h"

@implementation Teacher 

    @synthesize number = number; //属性的一些定义


    - (id)init

    {

        if (self = [super init])

        {

            number = nil;

        }

        

        return self;

    }



    -(id)initWithNumber:(NSString*)aNumber{

        if (self = [super init])

        {

            [aNumber retain];

            [number release];

            number = aNumber;

        }

        return self;

    }


//实现协议sayPrint中的必须方法

    -(void) sayPrint{

        NSLog(@"开始上课");

    }


//实现协议sayPrint2中的必须方法

    -(void) sayPrint2{

        NSLog(@"又一次开始上课");

    }


@end





#import <Foundation/Foundation.h>

@class Student//@class 实现复合关系 引入类名

@class Teacher;

@interface TeacherService : NSObject

-(void) do;

@end





teacherService.m

#import "TeacherService.h"

#import "Teacher.h"

#import "Student.h"

@implementation TeacherService

-(void) do{

    Teacher *teacher = [[Teacher alloc] initWithNumber:@"202"];

    [teacher sayPrint];

    

    

    Student *stu=[[Student alloc] init];

    stu.math=90;          //属性的打点使用

    stu.english = 91;

    NSMutableArray *mutable = [[NSMutableArray alloc] initWithObjects:@"数学",@"英语",@"物理",nil]; //nil的使用

    [stu courses:mutable];

    [stu print];

    [stu initWithProperty:@"ddd" age:20 math:70 english:90 courseArray:mutable];

    [stu print];

    

    [mutable release];

    [stu release];

    

    

    [teacher release];

    

    

}

@end





#import <Foundation/Foundation.h>

#import "TeacherService.h"

int main(int argc, const char * argv[])

{


//    @autoreleasepool {

//        

//        // insert code here...

//        NSLog(@"Hello, World!");

//        

//    }

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  //自动释放池使用

    TeacherService * service = [[TeacherService alloc]init];

    [service do];


    [service release];  //手动释放内存

    [pool release];

    return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于YOLOv9实现工业布匹缺陷(破洞、污渍)检测系统python源码+详细运行教程+训练好的模型+评估 【使用教程】 一、环境配置 1、建议下载anaconda和pycharm 在anaconda中配置好环境,然后直接导入到pycharm中,在pycharm中运行项目 anaconda和pycharm安装及环境配置参考网上博客,有很多博主介绍 2、在anacodna中安装requirements.txt中的软件包 命令为:pip install -r requirements.txt 或者改成清华源后再执行以上命令,这样安装要快一些 软件包都安装成功后才算成功 3、安装好软件包后,把anaconda中对应的python导入到pycharm中即可(不难,参考网上博客) 二、环境配置好后,开始训练(也可以训练自己数据集) 1、数据集准备 需要准备yolo格式的目标检测数据集,如果不清楚yolo数据集格式,或者有其他数据训练需求,请看博主yolo格式各种数据集集合链接:https://blog.csdn.net/DeepLearning_/article/details/127276492 里面涵盖了上百种yolo数据集,且在不断更新,基本都是实际项目使用。来自于网上收集、实际场景采集制作等,自己使用labelimg标注工具标注的。数据集质量绝对有保证! 本项目所使用的数据集,见csdn该资源下载页面中的介绍栏,里面有对应的下载链接,下载后可直接使用。 2、数据准备好,开始修改配置文件 参考代码中data文件夹下的banana_ripe.yaml,可以自己新建一个不同名称的yaml文件 train:训练集的图片路径 val:验证集的图片路径 names: 0: very-ripe 类别1 1: immature 类别2 2: mid-ripe 类别3 格式按照banana_ripe.yaml照葫芦画瓢就行,不需要过多参考网上的 3、修改train_dual.py中的配置参数,开始训练模型 方式一: 修改点: a.--weights参数,填入'yolov9-s.pt',博主训练的是yolov9-s,根据自己需求可自定义 b.--cfg参数,填入 models/detect/yolov9-c.yaml c.--data参数,填入data/banana_ripe.yaml,可自定义自己的yaml路径 d.--hyp参数,填入hyp.scratch-high.yaml e.--epochs参数,填入100或者200都行,根据自己的数据集可改 f.--batch-size参数,根据自己的电脑性能(显存大小)自定义修改 g.--device参数,一张显卡的话,就填0。没显卡,使用cpu训练,就填cpu h.--close-mosaic参数,填入15 以上修改好,直接pycharm中运行train_dual.py开始训练 方式二: 命令行方式,在pycharm中的终端窗口输入如下命令,可根据自己情况修改参数 官方示例:python train_dual.py --workers 8 --device 0 --batch 16 --data data/coco.yaml --img 640 --cfg models/detect/yolov9-c.yaml --weights '' --name yolov9-c --hyp hyp.scratch-high.yaml --min-items 0 --epochs 500 --close-mosaic 15 训练完会在runs/train文件下生成对应的训练文件及模型,后续测试可以拿来用。 三、测试 1、训练完,测试 修改detect_dual.py中的参数 --weights,改成上面训练得到的best.pt对应的路径 --source,需要测试的数据图片存放的位置,代码中的test_imgs --conf-thres,置信度阈值,自定义修改 --iou-thres,iou阈值,自定义修改 其他默认即可 pycharm中运行detect_dual.py 在runs/detect文件夹下存放检测结果图片或者视频 【特别说明】 *项目内容完全原创,请勿对项目进行外传,或者进行违法等商业行为! 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值