3.0 定义OC的类和创建OC的对象

接下来就在OC中模拟现实生活中的情况,创建一辆车出来。首先要有一个车子类,然后再利用车子类创建车子对象
要描述OC中的类稍微麻烦一点,分2大步骤:类的声明、类的实现(定义)。跟函数类似,函数有分声明和定义
类的声明
代码编写
定义一个Car类,拥有2个属性:轮子数、时速,1个行为:跑
类名\属性的命名规则:标示符的规则
类名的命名规范:有意义、驼峰标识、首字母大写

 1 #import <Foundation/Foundation.h>
 2 // 类的声明
 3 @interface Car : NSObject
 4 {
 5     @public
 6     int wheels; // 多少个轮子
 7     int speed; // 时速
 8 }
 9 - (void)run; // 跑的行为
10 @end

成员变量
@interface的大括号{}中声明的变量:wheels、speed
@interface的大括号和函数的大括号是不一样的
默认会初始化为0

@public
@public可以让Car对象的wheels和speed属性被外界访问

NSObject
加上:NSObject的目的是让Car类具备创建对象的能力

类的实现

1 // 类的实现
2 @implementation Car
3 - (void) run
4 {
5     NSLog(@"%i个轮子,%i时速的车子跑起来了", wheels, speed);
6 }
7 @end

创建对象
代码编写

 1 // 主函数
 2 int main()
 3 {
 4     // 创建车子对象
 5     Car *c = [Car new];
 6     c->wheels = 3;
 7     c->speed = 300;
 8
 9     [c run];
10     return 0;
11 }

main函数的代码分析、内存分析(对象在内存中有成员)
[Car new]每次都会创建出新的对象,并且返回对象的地址,那么就应该用一个指针变量保存对象的地址
Car *c = [Car new];
用一个指针变量c指向内存中的Car对象    
设置车子对象的属性
跟用指向结构体的指针访问结构体属性一样,用->
c->wheels = 3;
c->speed = 300;

创建多个Car对象
分别只设置wheels、speed属性
Car *c1 = [Car new];
c1->wheels = 4;
Car *c2 = [Car new];
c2->speed = 250;
[c1 run];
1个赋值给另一个,然后修改属性
Car *c1 = [Car new];
c1->wheels = 4;
c1->speed = 250;
Car *c2 = c1;
c2->wheels = 3;
[c1 run];

面向对象封装的好处
更加接近人类的思考方式
只需要关注对象,不需要关注步骤

对象与函数参数
对象成员变量作为函数参数
指向对象的指针作为函数参数
修改指向指向对象的成员
修改指针的指向

二、类的声明和实现
@interface和@implementation的分工

@interface就好像暴露在外面的时钟表面
@implementation就好像隐藏在时钟内部的构造实现

声明和定义多个类

常见错误
只有类的声明,没有类的实现
漏了@end
@interface和@implementation嵌套
两个类的声明嵌套
成员变量没有写在括号里面
方法的声明写在了大括号里面

语法细节
成员变量不能在{}中进行初始化、不能被直接拿出去访问
方法不能当做函数一样调用
成员变量\方法不能用static等关键字修饰,别跟C语言混在一起(暂时忽略)
类的实现可用写在main函数的后面,主要在声明后面就行了

OC方法和函数的区别
OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在
C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有
C函数不能访问OC对象的成员
低级错误:方法有声明,但是实现的时候写成了函数

OC的方法注意
方法只有声明,没有实现(经典错误)
方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法)
编译的时候:访问没有的成员变量直接报错,访问没有的方法,只是警告

@implementation
没有@interface,只有@implementation,也是能成功定义一个类的

@implementation Car : NSObject
{
    @public
    int wheels; // 多少个轮子
    int speed; // 时速
}
- (void) run
{
    NSLog(@"%i个轮子,%i时速的车子跑起来了", wheels, speed);
}
@end

@implementation中不能声明和@interface一样的成员变量

三、方法
设计一个Caculator计算器类,它拥有计算的功能(行为)
1.不带参数的方法
设计一个返回PI的方法
// 方法声明
- (double)pi;
// 方法实现
- (double)pi
{
    return 3.14;
}

方法调用

带一个参数的方法
设计一个计算平方的方法
// 方法声明
- (double)square:(double)number;
// 方法实现
- (double)square:(double)number
{
    return number * number;
}

方法调用

带多个参数的方法
设计一个计算和的方法
// 方法声明
- (double)sumOfNum1:(double)num1 andNum2:(double)num2;
// 方法实现
- (double)sumOfNum1:(double)num1 andNum2:(double)num2
{
    return num1 + num2;
}

方法调用

方法名注意
冒号也是方法名的一部分
同一个类中不允许两个对象方法同名

习题
给Car类设计一个方法,用来和其他车比较车速,如果本车速度快,就返回1,如果本车速度慢,就返回-1,速度相同就返回0

匿名对象
属性访问
[Car  new]->speed = 200;
方法调用
[ [Car  new]  run];

时间: 2024-10-12 06:07:09

3.0 定义OC的类和创建OC的对象的相关文章

类的创建以及与对象的关系(极客学院笔记)

1.cass 类名称{ 属性 方法 } 2.声明一个类需要通过一个关键字class(小写) 类与对象的关系 1.类是对某一类事物的描述,是抽象的.概念上的意义,对象是实际存在的该事物的每一个个体,也称为对象或实例. 内训划分

对一个类中创建的一组对象进行操作

1 public class Shuzuduixiangxingwei { 2 private int size; 3 private String name; 4 5 public int getSize(){ 6 return size; 7 } 8 public void setSize(int x){ 9 size = x; 10 } 11 public static void main(String[] args){ 12 Shuzuduixiangxingwei[] pets = n

OC 01 类和对象

一.  定义OC的类和创建OC的对象 接下来就在OC中模拟现实生活中的情况,创建一辆车出来.首先要有一个车子类,然后再利用车子类创建车子对象 要描述OC中的类稍微麻烦一点,分2大步骤:类的声明.类的实现(定义).跟函数类似,函数有分声明和定义 1.     类的声明 1)       代码编写 定义一个Car类,拥有2个属性:轮子数.时速,1个行为:跑 类名\属性的命名规则:标示符的规则 类名的命名规范:有意义.驼峰标识.首字母大写 #import <Foundation/Foundation.

第一个OC的类

[转自]http://www.cnblogs.com/mjios/archive/2013/04/06/3002814.html 本文目录 一.语法简介 二.用Xcode创建第一个OC的类 三.第一个类的代码解析 四.添加成员变量 五.添加方法 六.跟Java的比较 七.创建对象 八.访问公共成员变量和方法 说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序员,能够快速上手Objective-C.如果你还没有编程经验,或者对Objective-C.

【Objective-C】05-第一个OC的类

OC是一门面向对象的语言,因此它也有类.对象.静态\动态方法.成员变量的概念.这讲就来创建第一个OC的类. 一.语法简介 1.类 在Java中,我们用1个.java文件就可以描述清楚一个类:在OC中,一般用2个文件来描述一个类: 1> .h:类的声明文件,用于声明成员变量.方法.类的声明使用关键字@interface和@end. 注意:.h中的方法只是做一个声明,并不对方法进行实现.也就是说,只是说明一下方法名.方法的返回值类型.方法接收的参数类型而已,并不会编写方法内部的代码. 2> .m:

学习笔记之05-第一个OC的类

一.语法简介 1.类 在Java中,我们用1个.java文件就可以描述清楚一个类:在OC中,一般用2个文件来描述一个类: 1> .h:类的声明文件,用于声明成员变量.方法.类的声明使用关键字@interface和@end. 注意:.h中的方法只是做一个声明,并不对方法进行实现.也就是说,只是说明一下方法名.方法的返回值类型.方法接收的参数类型而已,并不会编写方法内部的代码. 2> .m:类的实现文件,用于实现.h中声明的方法.类的实现使用关键字@implementation和@end. 2.方

转:【Objective-C】第一个OC的类

本文目录 一.语法简介 二.用Xcode创建第一个OC的类 三.第一个类的代码解析 四.添加成员变量 五.添加方法 六.跟Java的比较 七.创建对象 八.访问公共成员变量和方法 说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序员,能够快速上手Objective-C.如果你还没有编程经验,或者对Objective-C.iOS开发不感兴趣,请忽略.学习本专题之前,建议先学习C语言专题. OC是一门面向对象的语言,因此它也有类.对象.静态\动态方法.

&lt;03&gt;【掌握】02-应用:类的创建练习+【掌握】03-对象的存储细节+

类名:Person 属性:年龄(_age).体重(_weight) 动作:吃饭(eat)方法.散步(walk)方法 功能:人可以吃各种食物 每次散步,让体重-0.2 #import <Foundation/Foundation.h> //Person类的声明 @interface Person:NSObject { //类的实例变量(属性.成员变量) @public NSString *_name; //姓名 int _age; //年龄 float _weight; //体重 } //定义人

【OC复合题】之定义一个学生类,需要有姓名,年龄,考试成绩三个成员属性,创建5个对象,属性可以任意值。(Objective-C)

题目: 定义一个学生类,需要有姓名,年龄,考试成绩三个成员属性,创建5个对象,属性可以任意值.(Objective-C) 1)    不使用@property,手动编写他们的访问器方法(getter和setter),注意内存管理(手动管理内存) 2)    增加一个便利构造器(快速构造器) 3)    使用NSLog输出学生对象时,输出信息格式为:My Name Is XXX  Age Is XXX Score Is XXX 4)    对5个学生对象按照成绩->年龄->姓名优先级排序(成绩相