C++编程思想 对象导言

  1. 抽象的过程
    1. 万物皆对象。
    2. 程序就是一组对象,对象之间通过发送消息互相通知做什么。
    3. 每一个对象都有它自己的由其他对象构成的存储区。
    4. 每个对象都有一个类型。
      • 类的最重要的突出特征是“能向它发送什么消息”
    5. 一个特定类型的所有对象都能接收相同的消息。
      • 对象的转型使其可接收与父类一样的消息。代表了OOP思想带来的替换能力。
  2. 对象有一个接口
    • 创建抽象数据类型是面向对象程序设计的基本思想。
    • 操作这些变量(称为发送消息或请求,对象根据收到的消息推断需要做什么事情)
    • 类描述了一组有相同特性(数据元素)和相同行为(功能)的对象,因此类实际上就是数据类型。
      • 一开始错误理解了上句话里的数据类型,认为类本身就一种类。但这样也是可以正确理解的。
      • 每定义一个类,可以认为这个类就是一个类实例。这个类我称它为高类。超类应该与设计模式有一定关系。
    • 可以向对象发出的请求是由它的接口(interface)定义的,而接口由类型决定。接口+隐藏的数据 = 实现(implementation)
  3. 实现的隐藏
    • 类创建者和客户程序员分开是有必要的。
    • 包装,用户不应该接触到机器内部。只需要接触到控制机器的接口就可以了。
    • 使用访问控制可以在类设计上实现这中包装。
      1. 理由1:防止客户程序员插手他们不应当接触的部分,使用户知道那些对他重要,那些他可以无视。
      2. 理由2:允许库设计者去改变这个类的内部工作方式,而不必担心这样会影响客户程序员。
    • public,private,protected.
    • protected基本与private相似:继承的类可以访问protected,但不可访问private。
  4. 实现的重用
    • 在类中包括另一个类为他的类成员。称为组合。
    • 当创建新类时,应该首先考虑组合,因为它更简单和灵活。
  5. 继承:重用接口
    • 继承后包含父类的所有成员和接口。
    • 子类与父类是相同类型的。
    • 加入全新函数,使子类与父类不同。
    • Overriding,改变已经存在的基类函数,使子类与父类不同
  6. 具有多态性的可互换对象
    • 早捆绑,编译器会对特定的函数名产生调用,而链接器将这个调用解析为真正要执行的代码的绝对地址。
    • 晚捆绑,当给对象发送消息时,在程序运行时才去确定被调用的代码。
      • c++编译器在真正调用的地方插入一段特殊的二进制代码。通过使用存放在对象自身中的信息,这段代码在运行时计算被调用函数函数体的地址。
    • 用virtual声明希望有晚捆绑的灵活性的函数。
  7. 创建和销毁对象
    • 栈内存
      • 为了最大化运行速度,将对象存放在栈中或静态存储区中,存储和生命期可以在编写程序时确定。
      • 栈是内存中的一个区域,可以直接由微处理器在程序执行期间存放数据。
      • 在栈中的变量可称为自动变量,或局部变量。
      • 栈为静态存储区,是内存中一个固定的块,在程序执行前分配。
      • 可以快速分配和释放,但是牺牲了灵活性,在写程序时,必须知道对象的准确数量、生命周期和类型。
      • 在栈上创建存储常常只是一条向下移动栈指针的微处理器指令,另一条是移回指令。
    • 堆内存
      • 可以在运行时才动态决定要创建的对象的类型和数量。
      • 需要新的对象,直接使用new关键字让它在堆上生存。
      • 当使用结束时,用关键字delete释放。
      • 在运行时动态管理,所有比栈内存的使用要耗时。
      • 在堆上的内存,必须要程序员决定何时销毁对象。
  8. 异常处理:应对错误
    • 检查错误,若有错误,进入处理错误的代码。
    • 与传统的C检查错误不同的是必须要处理错误的情况,不可以忽略。

 

posted @ 2014-11-29 00:27  gasxia  阅读(167)  评论(0编辑  收藏  举报