zoukankan      html  css  js  c++  java
  • Objective-C面向对象-对象和类


    文章都是先由本人个人博客:孙占兴:www.teilim.com,先更新,随后CSDN博客才会更新,掌握第一动态请关注本人主站。

    原文链接:http://www.teilim.com/objective-cmian-xiang-dui-xiang-pian-dui-xiang-he-lei/

    alt

    因学校(课设、放假)和自身(学车、买票)的事情。拖了两周没履行诺言。被我就可以爱又卖萌的师父(言肆酱)发现,才想起来要写博文了。陆续把近期自学的分篇总结,写的不错给予指正,相互学习。碎碎念结束~

    对象和类的介绍

    对象:是对客观事物的抽象,对象是类的实例。

    :则是对象的抽象,类是一种抽象的数据类型(类似int、double、float等基本数据类型)。

    打个例如。现实生活中的车分为非常多种,(如汽车、卡车、自行车、bus等),他们是存在的,而车则是它们整体的抽象的概述。他们统称都能够称作为车。

    类的声明和实现

    类的声明:用来声明对象的属性和行为。

    @interface Car {
        @public
        int _wheels;   //Car轮子属性
        int  _speed;   //Car速度属性
        NSString  *_color;    //Car颜色属性
    }
    @end
    

    在以上代码中,@interface代表Car类的声明。而@end则表示Car类声明的结束,而在括号里的代码为类声明对象的属性(成员变量)。

    类的实现

    @implementer Car: NSObject
    @end
    

    在以上代码中,@implementer Car代表Car类的实现,而@end则表示Car类实现的结束。Car: NSObject是Car继承NSObject。在后面的博文中会介绍。

    对象的创建

    首先,我先说一下对象和类在下Xcode中的声明和实现。如今代码演示一下。

    #import "Car.h"
    #import <Foundation/Foundation.h>
    int main ()
    {
        Car *bike = [[Car alloc]init];        
        Car *bus  = [[Car alloc]init];     
        Car *taix = [[Car alloc]init];
        return 0 ;
    }
    

    在这三行代码中的alloc为在Car类型中分别给(bike、bus、taix)指针所指向的对象各分配一块内存空间。并创建_ wheels,_ speed, *_color属性。

    而init将为(bike、bus、taix)所指向的对象的属性进行初始化。

    (也能够理解bike等是Car的对象)。

    成员变量的直接赋值

    #import "Car.h"
    #import <Foundation/Foundation.h>
    int main ()
    {
        Car *bike = [[Car alloc]init];        
        bike->_wheels = 2;
        bike->_speed = 20;
        bike->_colour = @"红色";
        NSlog(@"自行车的轮子有%d个,自行车的速度为%d km/h,自行车的颜色为%@",bike->_wheels,bike->_speed,bike->_colour);
       return 0;
    }
    

    在(bike->_ wheels = 2; bike->_ speed = 20; bike->_ colour = @"红色";)代码中,我让bike对象,间接的訪问Car类型中对对象声明的属性并把它们复制(须要在声明代码中➕@pubilc。由于他们的成员变量是被保护的,在后期学类的三大属性的封装后,便不再这样去操作)。

    所以NSlog(@"自行车的轮子有%d个,自行车的速度为%d km/h,自行车的颜色 为%@",bike->_wheels,bike->_speed,bike->_colour);将为系统打印出你在代码中所设置的属性,此处须要用手操作,方可得出结论~

    对象的方法声明、实现和调用。

    方法声明

    Objective-C中的方法类大体似函数。相同具有:方法名、參数、返回值类型。

    @interface Car {
        @public
        int _wheels;   //Car轮子属性
        int  _speed;   //Car速度属性
        NSString  *_color;    //Car颜色属性
    }
    - (void) run;
    @end
    

    上面代码中的- (void) run;是Objective-C中对象方法必须以"-"开头。(void)必须用括号括住。

    方法实现

    @implementer Car: NSObject
    - (void) run
    {
        NSlog(@“速度为%d的bike跑起来了!!!",_speed);
    }
    @end
    

    方法调用

    #import "Car.h"
    #import <Foundation/Foundation.h>
    int main ()
    {
       Car *bike = [[Car alloc]init];        
       [bike run];
       return 0 ;
    }
    

    代码中[bike run];[A B] A方法执行者。B方法。所以此代码理解为:bike指针对象中发送run消息(消息机制)。执行一下,看看会输出什么东西 ^_^。

    匿名对象

    个人理解:没有名字的对象

    #import "Car.h"
    #import <Foundation/Foundation.h>
    int main ()
    {
       [[Car alloc]init]->_spped = 100;        
       [[[Car alloc]init]run];
       return 0 ;
    }
    

    在上述代码[[Car alloc]init]->_spped = 100;中。在Car类中创建并初始化一个对象,而且直接訪问该对象中的_ speed成员变量。并直接复制为100。而并没有指定某一个对象来进行此操作。[[[Car alloc]init]run];而此代码,给我们直观的角度时调用run方法。事实上却不是我们的想要的结果300,而是0!原因是此时我们又又一次创建而且初始化还有一个对象,而这个对象的本身的_ speed的成员变量为0,和之前的我们所复制的300没有关系,原因非常easy,它们两个并非同一个对象,所以互不影响。所以第二个代码中调用的run方法,输出的结果会是0~

  • 相关阅读:
    链表习题(2)-一个集合用带头结点的单链表L表示,编写算法删除其值最大的结点。
    ubuntu14安装
    poi多sheet练习
    vmware虚拟机网络模式-仅主机模式
    vmware虚拟机网络模式-NAT模式
    vmware虚拟机网络模式-桥接模式
    IntelliJ IDEA 创建maven
    IntelliJ IDEA
    冒泡
    Java泛型 通配符? extends与super
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7144303.html
Copyright © 2011-2022 走看看