《黑马程序员》类和对象(Objective - c)
一、类和对象的概念
OC中有两个很关键的概念就是类和对象,类和对象的关系就如同模具和用这个模具制作出的物品之间的关系。一个类为它的全部对象给出了一个统一的定义,而他的每个对象则是符合这种定义的一个实体,因此类和对象的关系就是抽象和具体的关系。
创建对象:
创建对象需要现有类,对象需表述清楚应该具备的属性和功能(行为) 格式[行为执行者 行为名称]
创建类:
需关心三项条件:
事物名称(类名):人(Person)
属性:身高(height)、年龄(age)等
行为(功能):跑(run)、吃(eat)
注: 1.一般名词都是类
2.拥有相同(或者相似)属性和行为的对象都可以抽象出来一个类
3.类名的第一个字母必须大写;
4.不能有下划线,如果有多个英文单词组成,用驼峰标示
5.那个行为哪个类最清楚,就把这个行为设计到那个对象里
二、类的声明与实现
- 完整的写一个类/函数,需要两个步骤,类的声明和实现(定义)
-
类的声明:
@interface 类名
例:
@interface Car
{
// 这里声明对象的属性
}
// 这里声明一些行为(方法)
@end
-
类的实现:
@implementation 类名
// 这里是一些方法的实现
@end
例:
@implementation Car
// 方法的实现
@end
代码练习(类的创建与实现):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | // oc中的 NSObject声明在<Foundation/Foundation.h>中 #import <Foundation/Foundation.h> // 类名:Car // 属性:轮胎个数 wheels 、速度 speed // 方法:跑 // 定义一个函数:需要函数的声明和实现 // 定义一个类: 需要类的声明和实现 // 类的声明 // oc关键字自比须以@开头, // 类名开头的第一个字母必须以大写字母开头,如果有多个单词每个单词的开头必须时大写字母,要使用驼峰标示 // NSObject表示使这个类具备创建对象的能力//@interface用来声明成员变量/实例变量,和对象方法。 @interface Car: NSObject { // @public可以让外部的指针间接访问成员变量 @ public int wheels; int speed; } /* 1 oc对象方法必须以减号开头。 2 对想方法的返回值必须用括号括住。 3 方法的声明规则:(返回值)方法名:参数 4 oc方法中括号只括住数据类型 */ -( void )run; @end // 类的实现: @implementation Car // 方法的实现:说清楚声明中的方法 -( void )run { NSLog(@ "这辆车跑起来了" ); } @end int main( int argc, const char * argv[]) { // oc中只能通过类来创建对象 // 在oc中想要只想一些行为就先写一个[行为执行者 行为名称] // oc中创建的对象只能通过指针来操作 // [Car new]每次都会创建一个新对象,并且会返回新对象本身(对象的地址) Car *p = [Car new ]; // 通过指针来访问成员变量 // 给p指向的类的wheels属性赋值4, // 给p指向的类的speed属性赋值为300; p -> wheels = 4; p -> speed = 300; // 给p指向的类发送一条run消息,来调用run方法的实现。 [p run]; // 要访问类内部的成员变量必须使用指针来访问 NSLog(@ "轮胎个数 = %d,速度为= %d" ,p ->wheels,p ->speed); return 0; } |
● 成员变量和属性必须写在@interface 和 @end中间。
● 成员变量不允许初始化 。
● 成员变量不允许使用static修饰 。
● 类的实现可以写在mian函数后面,但是声明必须写在main函数前面进行声明。
三、对象的内存分析
代码练习:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #import <Foundation/Foundation.h> @ interface Car : NSObject { @ public ; int wheels; int speed; } -( void )run; @end @implementation Car -( void )run { NSLog( @"%d个轮子,速度为%d km/h的汽车跑起来了" ,wheels,speed); } @end int main( int argc, const char * argv[]) { Car *c =[Car new ]; c-> wheels = 4; c->speed = 250; [c run]; return 0; } |
三、方法与函数的区别
方法与函数的区别:
1.对象函数都是以减号-—
2.对象函数的声明必须写在@interface之间,对象方法的实现必须写在@implemention和@end之间
3.对象方法只能由对象来调用
4.函数能写在文件中的任意位置,函数归文件所有
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目