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

来源:互联网 发布:潮男装品牌淘宝 编辑:程序博客网 时间:2024/06/07 00:30

一、 面向对象

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

例子:

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

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

 

二、 类和对象

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

1、 定义类

1) 类的声明

举例:

类名:Car

属性:轮子数、时速

行为:跑

#import <Foundation/Foundation.h>// 类的声明@interface Car : NSObject{@publicint _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
原创粉丝点击