类的声明和实现
类的声明
#import<Foundation/Foundation.h>
//NSObject让类具有创建对象的能力,同样包含在Foundation框架中
@interface类名 : NSObject
{//@public 可以让外部指针间接访问对象内部成员变量
@public
成员变量;
成员变量;
}
//方法(行为):方法名参数返回值(声明和实现)
//只要是OC对象的方法必须以 - 开头 OC方法中的任何数据类型必须用()括住,且只能括住数据类型不能乱写
方法声明;
方法声明;
@end
@implementation类名
实现@interface中声明的方法
@end
int main()
{
//利用类创建对象
//oc中想执行行为,写[] [行为执行者行为名称]
//定义一个指针变量将来指向定义类型的对象,oc中只能利用指针变量间接操纵对象
//通过[类名 new]指令创建新对象并且会反悔新对象本身(新对象地址)
类名 *p=[类名 new];
p->成员变量=4;//给p指针指向的成员变量赋值
}
方法和函数的区别
方法
1.对象方法都是以减号 -
2.对象方法的声明必须写在@interface和@end之间
对象方法的实现必须写在@implementation和@end之间
3.对象方法只能由对象来调用
4.对象方法归类\对象所有
函数
1.函数能写在文件中的任意位置(@interface和@end之间除外),函数归文件所有
2.函数调用不依赖于对象
3.函数内部不能直接通过成员变量名访问某个对象的成员变量
@interface和@implementation的分工
@interface就好像暴露在外面的时钟表面
@implementation就好像隐藏在时钟内部的构造实现
常见错误
- 不能彼此嵌套
- 声明必须在实现上面
- 新类必须卸载外面
- 只有有对象才有成员变量,不能直接对未定义变量的成员变量赋值
- interface里声明不允许赋值,成员变量不能重复
不能随便将成员变量当成C语言中的变量使用(不能用static修饰)
6.声明放在main()函数前,不能放在放在后面,否则会报未定义的错误。实现可以放在main函数外面
语法细节
成员变量不能在{}中进行初始化、不能被直接拿出去访问
方法不能当做函数一样调用
成员变量\方法不能用static等关键字修饰,别跟C语言混在一起(暂时忽略)
类的实现可用写在main函数的后面,主要在声明前面就行了
/* 人 类名:Person 属性(成员变量\实例变量):体重、年龄 行为(方法):走路、吃 */ #import<Foundation/Foundation.h> /* 1.类的声明 * 成员变量 * 方法的声明 */ @interface Person : NSObject { @public int age; double weight; } - (void)walk; - (void)eat; @end // 2.类的实现 @implementation Person // 实现@interface中声明的方法 - (void)walk { NSLog(@"%d岁、%f公斤的人走了一段路", age, weight); } - (void)eat { NSLog(@"%d岁、%f公斤的人在吃东西", age, weight); } @end int main() { // 在使用类创建对象之前,会将类加载进内存 Person *p = [Person new]; p->age = 20; p->weight = 40; [p eat]; [p walk]; Person *p2 = [Person new]; p2->age = 30; p2->weight = 60; [p2 eat]; [p2 walk]; return0; }