面向对象是一种编程思想,无论是在C++, Java还是OC中都是差不多的,实现了一个简单的Model类, OC中和C++类似,类的声明和实现需要显示的分开,声明在.h中,实现部分则在.m中。

声明部分:Goods.h

//
//  Goods.h
//  02_OOP
//
//  Created by apple on 14-11-8.
//  Copyright (c) 2014年 cc. All rights reserved.
//

//Foundation是个FrameWork, Foundation.h 引用了很多常用的OC类
#import <Foundation/Foundation.h>

/**
 *  1. OC是面向对象的,OC中的关键字前面需要加上@,为了与C/C++的关键字区分,OC是支持C,C++,OC三者混编的
 *  2. @interface 并不是java中的接口,而是代表声明一个类。。(是不是有点蛋疼) @end 在这两个关键字之间写类的声明部分
 *  3. : 是继承符号,和C++ C#是一样的
 *  4. NSObject是否OC中所有类的最基类,继承不能省略
 */
@interface Goods : NSObject {
    //定义一个商品的Model类,Goods
    
    //OC声明成员属性必须定义在花括号之内
    //商品价格
    int m_price;
    //商品数量
    int m_count;
    

} // OC定义类的 花括号后面没有; 这点与C++不同

// OC声明方法前面需要加 - 或者 +来区分, - 带便非静态方法 + 代表静态方法(static方法)
// OC中建议getters方法与成员函数同名,即C++中的 int getPrice();
- (int)price;

// OC中方法名中的冒号代表参数,一个冒号代表一个参数,并且冒号也似函数名的一部分 函数名其实是setPrice: (蛋疼)
- (void)setPrice:(int)price;

- (int)count;
- (void)setCount:(int)count;

- (void)printProperty:(int)price:(int)count;


@end
实现部分: Goods.m
//
//  Goods.m
//  02_OOP
//
//  Created by apple on 14-11-8.
//  Copyright (c) 2014年 cc. All rights reserved.
//

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

/**
 *  @implementation 代表类的实现部分。。同样也不要理解为java里的实现接口
 */
@implementation Goods

//定义两组getters和setters方法

- (void)setPrice:(int)price {
    m_price = price;
}

- (int)price {
    return m_price;
}

- (void)setCount:(int)count {
    m_count = count;
}

- (int)count {
    return m_count;
}

- (void)printProperty:(int)price:(int)count {
    NSLog(@"价格=%i, 数量=%d", price, count);
}

@end
在main中创建类测试一下
//
//  main.m
//  02_OOP
//
//  Created by apple on 14-11-8.
//  Copyright (c) 2014年 cc. All rights reserved.
//

#import <Foundation/Foundation.h>
#include "Goods.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //OC中调用方法 [类名 函数名] 或者 [对象 函数名]
        //OC创建对象需要2步
        // 1.需要先调用NSObject继承而来的的静态方法alloc申请内存
        // 2.调用init方法来初始化对象,返回的对象是指针类型
        Goods* goods = [[Goods alloc] init];
        
        //调用setters
        [goods setPrice:99];
        [goods setCount:1000];
        
        //调用printProperty传入 两个getters获取成员属性的值, 打印出来
        [goods printProperty:[goods price] :[goods count]];
        
        //释放goods对象,如果使用的auto模式,则不需要调用, xcode在编译时会产生维护代码来帮助程序员释放掉内存
        //[goods release];
        
    }
    return 0;
}


Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐