黑马程序员——03-类和对象

一、 面向对象

C语言是面向过程的,关注的是解决问题需要哪些步骤;OC是面向对象的,关注的是解决问题需要哪些对象。

例子:

打电话 " 找手机,不用分析电话拨通过程

电脑坏了" 找电脑维修工,不用分析修理的步骤

 

二、 类和对象

类和对象是面向对象中有2个非常重要的概念,面向对象解决问题是先考虑需要设计哪些类,再利用类创建多少个对象

1、 定义类

1) 类的声明

举例:

类名:Car

属性:轮子数、时速

行为:跑

#import <Foundation/Foundation.h>
// 类的声明
@interface Car : NSObject
{
@public
int _wheels;  // 轮子数
int _speed;  // 时速
}
- (void)run;  // 跑的行为
@end
 

注:

  •  类名的命名要有意义且首字母大写,成员变量名以下划线 开头
  • @interface的大括号中不能声明方法,只能声明成员变量,且不能初始化,默认初始值为0
  • 此处的方法声明为 - (void)run; 其中 – 表示对象方法,void为返回值类型,run为方法名 
  • 加上 :NSObject的目的是让Car类具备创建对象的能力, @public成员变量类型,可以让Car对象的成员变量被外界访问

 

2) 类的实现

代码如下:

<pre code_snippet_id="594167" snippet_file_name="blog_20150131_2_685008" name="code" class="html">// 类的实现
@implementation Car
- (void) run
{
    NSLog(@"%i个轮子,%i时速的车子跑起来了", _wheels, _speed);
}
@end


 2、 创建对象 

1) 代码如下

int main()
{
    // 创建车子对象,用一个指针变量c指向内存中的Car对象
    Car *p = [Car new];
    c->_wheels = 4; // 对轮子赋值4 
    c->_speed = 200; // 对车子赋值200
    [c run]; // 对方法进行调用
    return 0;
}

 

2) 

[Car new]每次都会创建出新的对象,并且返回对象的地址,所以用一个指针变量c保存对象的地址 ,如下图表示。

3) 

// 创建多个Car对象,每个Car对象都有wheelsspeed属性

Car *p1 = [Car new];

Car *p2 = [Car new];

 

// 一个赋值给另一个,然后修改属性

Car *p3 = [Car new];

p3->_wheels = 4;

p3->_speed = 200;

Car *p4 = p3;

p4->_speed = 150;

[p4 run];

 

3、 常见错误

  •  只有类的声明,没有类的实现
  •  没写@end
  •  @interface和@implementation嵌套
  •  两个类的声明嵌套
  •  成员变量没有写在大括号里面
  •  方法的声明写在了大括号里面
  •  方法只有声明,没有实现(经典错误)
  •  方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法)
  •  编译的时候,访问没有的成员变量直接报错,访问没有的方法,只是警告

4、 语法细节

  •  OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间
  •  成员变量不能在{}中进行初始化、不能被直接拿出去访问
  •  方法不能当做函数一样调用
  •  成员变量/方法不能用static等关键字修饰
  •  类的实现可用写在main函数的后面,主要在声明后面就行了

三、方法

1、不带参数的方法

例如上面定义的run方法,再举一例说明

// 方法声明
- (double)pi;
// 方法实现
- (double)pi
{
    return 3.14;
}

  •  (double)pi;  - 代表方法类型,double为返回值类型,且要写在()内,pi为方法名
  •  方法调用:[c pi];  c为一指针变量

2、带参数的方法

// 方法声明
- (int)sumWithNum1 :(int)num1 andNum2:(int)num2;
// 方法实现
- (int)sumWithNum1 :(int)num1 andNum2:(int)num2
{
    return num1+num2;
}

  •  方法名为sumWithNum1 : andNum2:
  •  方法调用:[c sumWithNum1 :10 andNum2:20]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值