OC的类和对象

1.类的设计
类名:
(1)命名规范:有意义,驼峰标识,首字母大写
                      例子:
 

#import <Foundation/Foundation.h>

//1.类的声明。行为

//: NSObject目的是让Car这个类具备创建对象的能力//相当于java中的继承Object

@interface Car : NSObject

{//用来声明对象的属性(实例变量、成员变量,默认初始化为0

    

    //@public可以让外部的指针间接访问对象内部的成员变量,//相当于java中的public

    @public

    int wheels;

    int speed;

}

//方法(行为):方法名.参数。返回值(声明。实现)

//只要是OC对象的方法,必须以减号 - 开头

//OC方法中任何数据类型都必须使用小括号()扩起来

-(void)run;

@end

//2.类的实现@interface 中声明的方法

//用来实现@interface中声明的方法

@implementation Car

//方法的实现(说清楚方法里面有什么代码)

-(void)run

{

    NSLog(@"车子跑起来了");

}

@end

int main()

{

  //OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称]

  //利用类来创建对象

// 执行了Car这个类new行为创建新对象

    //[Car new]每次都会创建一新对象,并且返回这个对象的本身(新对象的地址)

    Car *p=[Car new];

    Car *p2=[Car new];

    p2->wheels=4;//修改p所指向对象属性的值,属性必须使用@public来进行修饰

    p2->speed=240;

    [p2 run];//P所指向的对象发送一条Run消息

    NSLog(@"车子有%d个轮子,时速:%dkm/h", p2->wheels,p2->speed);

    return 0;

}


2.面向对象的好处

更加接近人类的思考方式,只需要关注对象,不需要关注步骤


3.常见错误

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

4.语法细节

  • 成员变量不能在{}中进行初始化,不能直接拿出去访问
  • 方法不能当作函数一样调用
  • 成员变量\方法不能用static等关键字修饰,不能和C语言混在一起
  • 类的实现可以写在main函数后面,主要在声明后面就行了

5.OC方法和函数的区别

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

6.OC方法注意

  • 方法只有声明,没有是实现(经典错误)
  • 方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法,只有@implementation也可以成功的定义一个类)
  • 编译的时候访问没有的成员变量直接报错

编译链接OC的源文件成为一个可执行文件的命令

cc 文件全名 -framework Foundation


7.类带有参数的方法示例:

/*

 计算器类

 方法:

 1> 返回 π

 2> 计算某个整数的平方

 3> 计算两个整数的和

 */


#import<Foundation/Foundation.h>


@interface jisuanqi : NSObject

-(double)pi; //返回pi

//OC方法中一盒冒号对应一个OC参数,用来区分实现时候的多个参数

-(int)pingFang : (int)num;

//方法名是:sumWithNum1:andNum2:

-(int)sumWithNum1:(int)num1 andNum2:(int)num2;

@end


@implementation jisuanqi

-(double)pi{//不带参数的方法

    return 3.14;

}


-(int)pingFang:(int)num

{

    return num*num;

}

//描述更贴切

-(int)sumWithNum1:(int)num1 andNum2:(int)num2

{

    return num1+num2;

}

@end


int main()

{

    jisuanqi *jsq=[jisuanqi new];

    double a=[jsq pi];

    int b=[jsq pingFang:10];

    int c=[jsq sumWithNum1:20 andNum2:30];

    NSLog(@"pi方法的返回值是%f",a);

    NSLog(@"pingFang:方法的返回值是%d",b);

    NSLog(@"sumWithNum1:andNum2:方法的返回值是%d",c);


}

7.1不带参数的方法

  //方法声明

 -(double)pi;

//方法实现

-(void)pi

{

  return 3.14;

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值