OC_关于Object-C类的创建以及应用

来源:互联网 发布:图片采集软件 编辑:程序博客网 时间:2024/06/17 07:35

oc类的创建与Java或c++在形式上有很大的不同,所以今天我们讲讲如何使用Object-C
来创建一个类、并举例进行一些简单的应用。首先声明本文默认读者有一定的面向对象程序设计的基础。
对类、类的成员变量、类的成员函数以及类对访问权限的控制等的基本概念。如果你对以上有一定的了解,
那么就请继续往下阅读本文。
一、首先我们来列举一个完整的类应该包含哪些成分
1、成员变量
成员变量属于对象由每个对象分别创建仅属于单个对象使用,静态变量属于类由类创建,由类来使用
2、成员方法、静态方法

首先我们看一下类的声明:


二、类的定义与实现
类的定义和实现是分别在两个文件中实现的,其中类的声明实在.h文件中完成而类的定义是在.m文件中实现的

1、在类的声明文件中需要实现
@interface classname : parent
..........//类的定义
@end
看上面的定义可知类的所有定义在以@开头的两串字符串之间
----其中classname就是类的名称
----而parent就是这个类的父类,父类必须要有,如果没有可以使用NSObject作为父类
在声明文件中需要首先声明成员变量
类型名 变量名;
声明的成员变量默认是私有的,在类的外部是不可访问的,所以还要声明成员变量的访问方法
声明方法:
方法的开头是+ 或 - ,+代表函数是一个静态函数通过类来访问,-代表是一个成员方法需要通过对象来访问
其次是函数的返回值类型void为无返回类型或其他各种类型(包括基本数据类型和自定义数据类型),
然后是方法名(要遵循命名规则),然后就是参数列表,如下:
例如一个动态方法
- (void) setParam:(int) age{
    ...........
}
请注意无论是返回值类型还是参数列表类型,每一个类型都要放在括号中。
2在类的实现文件中需要实现
import"classname.h"
@implementation classname
............//对方法声明的实现
@end
在实现文件中要根据声明文件声明的方法一一实现。
补充:
    如果一个方法没有在.h文件中声明,直接在.m文件中实现,那么这个函数就是一个私有的函数,这个函数只能在
类的内部调用而不能再类外调用

接下来我们看下类的定义:


三、自定义构造
oc对于自定义构造方法与Java与C++还是有着很大的不同
我们都知道Java与C++的构造方法是没有返回值的这是因为Java与C++的构造函数名必须与类名一致,一旦编译器认定一
个方法是构造方法就会默认返回本类型。那么既然oc的构造方法有返回值,那就可以理解oc的构造方法理论上是可以随意
命名的。既然oc的构造方法必须返回类型,那么返回的是什么类型呢?毫无疑问当然是他自身的类型,不过由于编程习惯
我们一般将构造的返回值设为(id).好,接下来我们看构造函数的实现。首先我们知道既然要调用构造函数,那就说明此
时对象已经被创建只是还需要构造方法来初始化,那么我们在自定义构造函数内如何初始化本类型的一个对象?其实我们
可以调用本类的父类的构造方法来对对象进行基本的初始化,然后使用初始化后的对象再对自定义类的成员进行初始化。
说了那么多我们来看一个构造函数的基本定义:
-(void)initStudent:(int)newAge.....{
    if(self = [super init]){
        ......
    }
    return self;
}
四、自定义description函数
我们知道如果要打印Java对象需要重写toString方法,如果要打印C++对象需要自定义<<运算符那么如果要打印oc对象我
们就要重写description方法,由于比较简单我们直接看代码
- NSString description{
    ........
}
只要将省略号替换为打印对象内容的语句就可以啦

最后我们看下类的使用及结果:


五、点语法
我们知道在Java或C++等绝大多数编程语言中都是使用'.'来调用方法,这个在oc中较为特殊,我们可以使用'.'来调用get/set
方法,假设我们在类内定义了一个变量:int age;
这时我们来定义它的get/set方法
get方法 - (int)getAge{.....; return age;}
set方法 - (void)age:(int)newAge{.......; age = newAge}
假如我们创建了这个类的一个对象stu,那么我们应如何来对age变量操作呢?如下
stu.age = 10;      //赋值操作
int i = stu.age;   //取值操作
注意上面两行的stu.age不是直接对变量age进行操作而是分明调用了方法getAge、age:进行的操作。

0 0
原创粉丝点击