三、类以及其继承

一、类概述

1.1 面向对象

面向对象是计算机领域的重心之一,但是很少有具体准确的概念,从使用上来说,面向对象就是在编程过程中采用封装、继承、多态的编程方法。这里我们讲的重心是继承,多态部分后面提及。

 

1.2 一些基本概念

(1)对象

对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。

 

(2)对象的状态和行为。

    对象具有状态,一个对象用数据值来描述它的状态。

    对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。

    对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中

 

(3)类。

    具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。

    类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。

    类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

 

(4)类的结构。

    在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。

    ①一般--具体结构称为分类结构,也可以说是关系,或者是“is a”关系。

    ②整体--部分结构称为组装结构,它们之间的关系是一种关系,或者是“has a”关系。

 

(5)消息和方法。

    对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。

类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。

 

 

二、类的使用点

2.1 分离接口和实现文件

new file 中找到一个objective class这个选项在新建的时候选中同时建立.h文件的选项,就可以生成一个.h,一个.m的文件,这样就可以自己编写自己的头文件,例如:

Fraction.h

//

//  Fraction.h

//  example

//

//  Created by MeMac.cn on 11-8-12.

//  Copyright 2011 __MyCompanyName__. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

 

@interface Fraction : NSObject {

    int num;

}

 

-(void) print;

-(void) setNum:(int) d;

 

@end

 

Fraction.m

//

//  Fraction.m

//  example

//

//  Created by MeMac.cn on 11-8-12.

//  Copyright 2011 __MyCompanyName__. All rights reserved.

//

 

#import "Fraction.h"

 

 

@implementation Fraction

-(void) print

{

    NSLog(@"%d",num);

   

}

 

-(void) setNum:(int) d

{

    num=d;

   

}

 

@end

 

 

 

实现文件example.m

 

#import "Fraction.h"

 

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

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

 

    Fraction *my = [[Fraction alloc]init];

   

    [my setNum:1];

    [my print];

   

    // insert code here...

    NSLog(@"Hello, World!");

    [pool drain];

    return 0;

}

 

 

 

1.2 静态变量

定义格式

static NSUInteger n;

 

作用域

Static变量的作用域为当前的.m的文件范围。

 

使用

C++不一样的是,objective-c不支持静态成员变量,也就是不支持类本身包含值,那么要用类静态成员变量就只能通过定义静态成员函数,在类外面定义静态变量,然后用静态成员函数来访问这个静态变量,这样就可以实现静态成员变量的效果。

下面是网上一段程序,已经很简洁的阐述了这个知识点:

//example.h
@interface Example : NSObject {

}
- (id)init;
+(int)instanceCount;
@end

//example.m
#import "example.h"

static int count;

@implementation Example
-(id)init{
    self = [super init];
    if(nil!=self){
        count+=1;
    }
    return self;
}

+(int)instanceCount{
    return count;
}
@end

 

 

 

三、类的继承

类的继承和JAVA比较类似,是单继承的,至于代码,比较简单,不做举例,网上样例程序也数不胜数,下面就说几个注意点:

 

1、  每个实例变量都有自己的实例变量,尽管有继承而来的实例变量,但是继承后的和继承前的是完全不同的两个实例变量;

2、  当一个头文件中要定义一个自定义的类,有两种方法可以声明使用的是那个类,从而知道在定义的时候定义的东西是什么。第一种:#import;第二种:@class(写在interface前面);

3、  与其他语言类似,当用户想要在继承的方法上有重载的需求的时候,objective-c也有这个功能,但是必须要相同的返回类型,参数的数目和重载的方法要相同;

4、  抽象类的问题雷同C++的语法,可以参考使用;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值