zoukankan      html  css  js  c++  java
  • 「OC」类和对象

    一、面向对象

      OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类。

      术语:OO面向对象、OOP面向对象编程

    二、类和对象

    (一)关于类

      类的设计只关注三个东西:类名、属性和方法

      注意:一般名词都是类,拥有相同属性和行为的对象都可以抽象为一个类,类名是标识符的一种,需要符合规范,通常类名的第一个字母大写,且不能有下划线,如果有多个单词则使用驼峰标识。在对方法进行类的划分中,一般采取的做法是谁最熟悉这个方法那么就把这个方法划分给谁。在OC中,对象对方法的调用称为消息机制,即向既定的对象发送了什么消息。

    (二)简单内存分析

      类创建对象,每个对象在内存中都占据一定的存储空间,每个对象都有一份属于自己的单独的成员变量,所有的对象公用类的成员方法,方法在整个内存中只有一份,类本身在内存中占据一份存储空间,类的方法存储于此。

      每个对象内部都默认有一个isa指针指向这个对象所使用的类。

      [p eat];表示给p所指向的对象发送一条eat消息,调用对象的eat方法,此时对象会顺着内部的isa指针找到存储于类中的方法,执行。

      isa是对象中的隐藏指针,指向创建这个对象的类。

    (三)类的声明和实现

      1)类的声明:

        声明一个Car类,它拥有wheels和speed两个属性,一个run方法

         

      2)类的实现:

         

      3)类的调用:

        首先在主函数创建了p和p2两个Car类型的对象,把p对象的wheels和speed属性分别设置为5和250,p和p2分别调用run方法,把跑的wheels和speed属性设置为4和300。

        

      输出结果为:

        

      练习:

        设计一个Person类

        

      输出结果:

        

    (四)常见错误

       1.类的声明和实现不能嵌套

       2.方法的实现必须放在@implementation中,不能放在@interface中。

       3.方法声明不能放在大括号{}里。

       4. 声明新类的时候不能和已有的类嵌套。

       5.不允许在@interface大括号里给成员变量赋值(初始化),也不能随便将成员变量当作C语言中的变量来使用,如用static修饰。

       6.类的声明必须放在main函数前面。

    三、方法与函数

      方法与函数的区别:

      (1)对象方法的声明必须写在@interface和@end之间,对象方法的实现必须写在@implementation和@end之间

      (2)对象方法都以-号开头,类方法都以+号开头

      (3)对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数一样调用

      (4)函数能写在文件的任意位置(@interface和@end之间除外),函数归文件所有

      (5)对象方法归类对象所有

      (6)函数调用不依赖与对象

      (7)函数内部不能直接通过成员变量名访问对象的成员变量

    四、类和方法的设计

      工具类:基本没有任何的成员变量,里面的方法基本都是类方法。

      注意:在对象方法中可以调用类方法。

      需求:设计一个工具类:一个计算器类,要求(1)返回π,(2)计算两个整数的和,(3)计算某个整数的平方。

      

      输出结果:

        

    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    消息队列RocketMQ版最佳实践订阅关系一致
    Java8 stream、List forEach 遍历对象 List 对某一字段重新赋值
    SQL的嵌套查询与连接查询
    Xshell7 个人可以申请免费使用正版
    @NotEmpty、@NotBlank、@NotNull 区别和使用
    List集合日常总结
    Time Zone(时区)
    Arrays.asList() 和Collections.singletonList()的区别
    GitBash生成SSH密钥
    Mysql中用SQL增加、删除、修改(包括字段长度/注释/字段名)总结
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/4485931.html
Copyright © 2011-2022 走看看