zoukankan      html  css  js  c++  java
  • 04-类与对象的练习(第二个OC的类)

     

    本节通过创建一个新的类,对以下知识点做下练习:

      (1)类的3要素

        (2)成员变量的声明、命名规则

          (3)类的声明与实现

          (4)创建一个对象,new方法执行的3步操作

          (5)成员变量的赋值操作

    1、创建一个人类,属性:年龄、体重,行为(方法):跑、吃

      第一步:分析类的3要素

        类名:Person(人类)

        属性:_age(年龄)、_weight(体重)

        行为(方法):run(跑)、eat(吃)

        这里 :表示的是继承关系,后面的笔记会谈及,这里只做简单了解

          类1 : 类2   表示的是 类1继承类2:类1是类2的子类,类2是类1的父类

          :NSObject 表示继承NSObject类,NSObject类是所有类的基类,它没有父类。  

      第二步:类的声明(@interface   @end)

        类的声明又分为成员属性的声明行为(方法)的声明

          1>成员属性的声明:

    • {}中用来声明对象属性;
    • 以下划线_开头,例如_speed(速度),不以下划线开头不算错,但是行业规范是以下划线_开头;
    • 在创建对象的时候,new方法会将成员变量/实例变量默认初始化为0;
    • 遵循驼峰原则,例如 _seatNumber(座位号);

          2>方法(对象方法)的声明:

    • 方法:方法名、参数、返回值(声明) ,不能写在{}中
    • 对象方法必须以减号 - 开头;
    • OC方法中任何数据类型都必须用小括号()括起来,并且小括号()只能用来括住数据类型,不要乱用;

    这里的数据类型包括返回值类型和参数数据类型

    • 跟函数不同,方法的声明后面不需要{}  

          举例说明:

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

            1>以减号 - 开头,说明是对象方法

            2>方法名是 sumWithNum1: andNum2:   注意:冒号:也是方法名的一部分

            3>第一个int代表的是返回值类型,后面两个int分别代表参数num1和num2的数据类型,都用小括号()括住了

            4>方法的声明以末尾的分号;结束,后面不能再加{} 

    下面写出Person类的声明部分的代码: 

     1 #import <Foundation/Foundation.h>
     2 @interface Person :NSObject
     3 {
     4        @public//可以让类的外部的指针访问到对象的成员变量/实例变量
     5        int _age;//年龄
     6        double _weight;//体重        
     7 } 
     8 //方法的声明
     9 - (void)run;//
    10 - (void)eat;//
    11 @end

       第三步:类的实现(实现@interface中声明的方法)

    这里我们假定方法内容为:"多少岁多少公斤的人在吃"和"多少岁多少公斤的人在跑"

    写出Person类的实现部分的代码:

     1 //Person类的实现
     2 @implementation
     3 //实现@interface中声明的方法
     4 - (void)run
     5 {
     6     NSLog(@"%i岁,%.1fkg的人在跑");
     7 }
     8 
     9 - (void)eat
    10 {
    11     NSLog(@"%i岁,%.1fkg的人在吃");
    12 }
    13 
    14 @end

        第四步:创建对象

        1>使用[Person new]可以创建出一个对象,这里完成了3件事情:a.分配存储空间 b.初始化成员变量 c.返回空间地址

        2>OC中,只能通过指针间接操作对象的成员变量/实例变量

    下面写出main函数代码:

     1 int main(int argc, const char * argv[])
     2 {
     3      //利用Person类创建一个对象
     4     Person *person1= [Perosn new];
     5     //给person1所指向的对象的成员变量/实例变量赋值
     6     person1 -> _age = 20;
     7     person2 -> _weight = 50;
     8     //person1调用对象方法run
     9     [person1 run];
    10     //person1调用对象方法eat
    11     [person1 eat];   
    12 }

    综上,可以得到完整的代码如下:

     1 //1.类的声明
     2 #import <Foundation/Foundation.h>
     3 @interface Person : NSObject
     4 {
     5     @public
     6     int _age;//年龄
     7     double _weight;//体重
     8 }
     9 - (void)run;//
    10 - (void)eat;//
    11 @end
    12 
    13 
    14 //2.类的实现
    15 @implementation Person
    16 //实现@interface中声明的方法
    17 - (void)run
    18 {
    19     NSLog(@"%d岁,%.1fkg的在跑", _age, _weight);
    20 }
    21 
    22 - (void)eat
    23 {
    24     NSLog(@"%d岁,%.1fkg的人在吃", _age, _weight);
    25 }
    26 
    27 @end
    28 
    29 
    30 int main(int argc, const char * argv[])
    31 {
    32     //在使用类创建对象之前,会将类加载进内存
    33     //方法列表存放在类中
    34     Person *person1 = [Person new];
    35     person1 -> _age = 20;
    36     person1 -> _weight = 50.0;
    37     [person1 run];
    38     [person1 eat];
    39 }

    编译、链接、运行,输出结果为:

    2、成员变量/实例变量赋值的练习 

     分析并说出以下代码段的输出结果:

    1 Person *person1 = [Person new];
    2 
    3 person1 -> _age = 20;
    4 person1 -> _weight = 50;
    5 
    6 Person *person2 = person1;
    7 person2 -> _age = 30;
    8 
    9 [person1 run];

    分析:1>第1行表示创建了一个对象1,并把对象1的地址赋值给指针变量person1,即person1指向对象1

       2>第3、4行给对象1的成员变量进行赋值,这时对象1的年龄为20,体重为50

       3>第6行定义一个新的指针变量person2,把person1赋值给它,那么person2也就指向了对象1

            4>由于person2也指向了对象1,再对_age进行赋值,会把原先的赋值覆盖掉,因此这时对象1的年龄是30

            5>第9行,调用对象方法,输出结果:30岁,50.0kg的人在跑

    1 Person *person1 = [Person new];
    2 person1 -> _age = 20;
    3 [person1 run];
    4         
    5 Person *person2 = [Person new];
    6 person2 -> _weight = 50.0;
    7 [person2 eat];
    8     

    分析:只对对象的一个成员变量进行了赋值,另一个没有赋值。这时没有赋值的成员变量就会使用new方法默认初始化的值0。

       因此输出结果为:20岁,0.0kg的人在跑

                                   0岁,50.0kg的人在吃

       

    人生之路,不忘初心,勿忘始终!
  • 相关阅读:
    POJ1850Code
    POJ1019Number Sequence
    POJ2115C Looooops
    POJ1496Word Index
    POJ3292Semiprime Hnumbers
    POJ1942Paths on a Grid
    搞笑!
    个人感觉vs 提高效率的快捷键
    PYTHON实现 字符串转化为十六进制串
    scapy发送伪装包(1) 获取本机信息
  • 原文地址:https://www.cnblogs.com/xdl745464047/p/3996114.html
Copyright © 2011-2022 走看看