• 03-类的声明和实现(第一个OC的类)


         要描述OC中的类稍微麻烦一点,分2大步骤:类的声明类的实现(定义)。跟函数类似,函数有分函数的声明和函数的定义。

    1创建一个Car

    • 定义一个Car类,拥有2个属性:轮子数、时速,1个行为:跑
    • 类名属性的命名规则:标示符的规则
    • 类名的命名规范:有意义、驼峰标识、首字母大写

    2、代码编写

      (1)分析类的3要素

        类名:Car

        属性:轮胎个数(_wheels)、速度(_speed)

        行为:跑(run)

      (2)完整地写一个函数:函数的声明和定义(实现);

         完整地写一个类:类的声明和实现

      (3)类的声明:声明对象的属性、行为(方法)

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

     1 //1.类的声明
     2 //声明对象的属性、行为
     3 // : NSObject 表示Car类继承基类NSObject,目的是:让Car类具有创建对象的能力(new方法属于类方法,它的声明在基类NSObject)
     4 @interface Car : NSObject
     5 //{}中用来声明对象属性(成员变量实例变量,默认会初始化为0)
     6 {
     7    @public//可以让Car类创建的对象的_wheels和_speed属性被外界指针间接访问
     8    int _wheels;//轮胎个数
     9    int _speed;//速度
    10 }
    11   //方法(行为):方法名、参数、返回值(声明、实现),不能写在{}里面
    12   //只要是OC对象的方法,必须以减号 - 开头
    13   //OC方法中任何数据类型都必须用小括号()括起来
    14   //OC方法中的小括号():只用来括住数据类型,不要乱用
    15   //方法的声明后面不需要{}
    16 - (void)run;//
    17 @end
    18     
    19 //2.类的实现
    20 //用来实现@interface中声明的方法
    21 @implementation Car
    22   //方法的实现(说清楚方法里面有什么代码)
    23- (void)run
    24{
    25   NSLog(@"轮子个数为%i,时速为%ikm/h的车子跑起来了!", _wheels, _speed);
    26}
    27 
    28 @end
    29 
    30 int main(int argc, const char * argv[])
    31 {
    32     //在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称]
    33     //利用类来创建一个对象
    34     //执行了Car这个类的new行为来创建新对象
    35     //new方法属于类方法
    36     
    37     //OC中,只能通过指针间接操作对象的成员变量
    38     //定义了一个指针变量car1,car1将来指向的是Car类型的对象
    39     //[Car new]会创建出一个新对象,并且会返回新对象本身(新对象的地址)
    40     Car *car1 = [Car new];
    41     
    42     Car *car2 = [Car new];
    43     
    44     car2 -> _wheels = 5;
    45     car2 -> _speed = 300;
    46     
    47     
    48     //给car1所指向对象的成员变量赋值
    49     car1 -> _wheels = 4;
    50     car1 -> _speed = 120;
    51     
    52     //car1调用对象方法run
    53     //给car1所指向的对象发送一条run消息
    54     [car1 run];
    55     [car2 run];
    56     
    57     return 0;
    58 }

    本节重点:

      1、类的声明写在@interface和@end之间;类的实现写在@implementation和@end之间。注意@end后面没有;号

      2、: NSObject 表示Car类继承基类NSObject,目的是:Car类具有创建对象的能力(new方法属于类方法)

       3、类的声明中,{}中只能用来声明对象属性(成员变量/实例变量),默认会初始化为0。

       4、@public可以在类的外部通过指针间接访问到对象的成员变量/实例变量。

       5、类的声明中,方法(类方法、对象方法)只能写在{}之后,@end之前;注意:方法不能写在{}中。

       6、行为(方法),这里暂时只谈对象方法

         1>方法名、参数、返回值(声明、实现),不能写在{}里面。

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

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

    4>OC方法中的小括号():只用来括住数据类型,不要乱用

    5>方法的声明后面不需要{}

    7、类的实现用来实现@interface中声明的方法,方法的实现(说清楚方法里面有什么代码)

    8、在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称];利用类来创建一个对象;

       执行了Car这个类的new行为来创建新对象;new方法属于类方法。
    9、[Car new] 完成了3件事:1>分配存储空间;2>初始化成员变量;3>返回空间地址。
    10、
    成员变量的赋值:利用指针间接操作对象的成员变量

    //给car1所指向对象的成员变量赋值

        car1 -> _wheels = 4;

        car1 -> _speed = 120;

     

    常见错误 :

     1.只写了类的声明,没有写实现

     2.不能丢了:NSObject

     3.不能丢掉@end这个结束符

     4.声明与实现不能嵌套使用

     5.不能将类的声明或实现放入函数当中

     6.属性要写在{}当中

     7.属性在声明当中不可以直接赋值

     8.错误原因:-[Person run]: unrecognized selector sent to instance 0x100202010'

       出现场景:当一个对象或类名调用方法的时候,没有找到这个方法。//五星*****

     9.oc的弱语法,没有声明部分,也可以定义类。但是不要这样使用。

    人生之路,不忘初心,勿忘始终!
  • 相关阅读:
    台阶问题,100层台阶,1,2,3步组合走完。一种有几种组合?
    idea 导入gitlab项目
    查找学生信息
    谁是你潜在的朋友
    Sort
    统计同成绩学生人数
    打印日期
    今年的第几天?
    DayOfWeek
    日期差值
  • 原文地址:https://www.cnblogs.com/xdl745464047/p/3995916.html
Copyright © 2020-2023  润新知