zoukankan      html  css  js  c++  java
  • C++再学习之路(五)

    1.继承和动态绑定在两个方面简化了我们的程序

      能够容易地定义与其他类相似但又不相同的新类,能够更容易地编写忽略这些相似类型之间区别的程序  P471

    2.之所以称通过继承而相关联的类型为多态类型,是因为在许多情况下可以互换地使用派生类型或基类类型的“许多形态”,在C++ 中,多态性仅用于通过继承而相关联的类型的引用或指针  P472

    3.基类必须指出希望派生类重定义哪些函数,定义为 virtual 的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数  P472

    4.通过动态绑定我们能够编写程序使用继承层次中任意类型的对象,无需关心对象的具体类型,使用这些类的程序无需区分函数是在基类还是在派生类中定义的  P473

    5.通过基类的引用(或指针)调用虚函数时,发生动态绑定,引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键,用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义的  P473

    6.除了构造函数外,任意非 static 成员函数都可以是虚函数,保留字 virtual 只在类内部的成员函数声明中出现,不能在类定义体外部出现的函数定义上  P474

    7.像 public 成员一样,protected 成员可以被派生类对象访问;像 private 成员一样, protected 成员不能被类的用户访问;派生类只能通过派生类对象访问其基类的 protected 成员,派生类对其基类类型对象的 protected 成员没有特殊访问权限    P475

    8.被继承的类必须决定实现的哪些部分声明为 protected 而哪些部分声明为 private ,希望禁止派生类访问的成员应该设为 private ,提供派生类实现所需操作或数据的成员应设为 protected ,提供给派生类型的接口是 protected 成员和 public 成员的组合  P479

    9.因为每个派生类对象都包含基类部分,所以可将基类类型的引用绑定到派生类对象的基类部分,也可以用指向基类的指针指向派生类对象  P479

    double print_total(const Item_base&, size_t);
    Item_base item;
    print_total(item, 10);
    Item_base *p = &item;
    Bulk_item bulk;
    print_total(bulk, 10);
    p = &bulk;  

    10.将基类类型的引用或指针绑定到派生类对象对基类没有任何影响,对象本身不会有任何改变,仍为派生类对象,对象的实际类型可能不同于该对象引用或指针的静态类型,这是C++ 动态绑定的关键  P480

    11.派生类虚函数调用基类版本时,必须显式使用作用域操作符,如果派生类函数忽略了这样做,则函数调用会在运行时确定并且将是一个自身调用,从而导致无穷递归  P481

    12.无论派生列表中是什么访问标号,所有继承 Base 的类对 Base 中的成员具有相同的访问,派生访问标号将控制派生类的用户对从 Base 继承而来的成员的访问  P483

    13.友元关系不能继承,基类的友元对派生类的成员没有特殊访问权限,如果基类被授予友元关系,则只有基类具有特殊访问权限,该基类的派生类不能访问授予友元关系的类  486

    14.将派生类对象转化为基类类型引用,将对象传递给希望接受引用的函数时,引用直接绑定到该对象,虽然看起来在传递对象,实际上实参是对该对象的引用,对象本身未被复制,并且,转换不会在任何方面改变派生类型对象,该对象仍是派生类型对象;用派生类对象对基类对象进行初始化或赋值,将派生类对象传递给希望接收基类类型对象(而不是引用)的函数时,该派生类类型对象的基类部分被复制到实参  P488

    15.一个类只能初始化自己的直接基类,直接基类就是在派生列表中指定的类,派生类应通过使用基类构造函数尊重基类的初始化意图,而不是在派生类构造函数函数体中对这些成员赋值  P492

    16.重构包括重新定义类层次,将操作和/或数据从一个类移到另一个类,为了适应应用程序的需要而重新设计类以便增加新函数或处理其他改变时,最有可能进行重构  P492

    17.如果派生类定义了自己的复制构造函数,该复制构造函数一般应显式使用基类复制构造函数初始化对象的基类部分;如果派生类定义了自己的赋值操作符,则该操作符必须对基类部分进行显式赋值   P495

    18.即使析构函数没有工作要做,继承层次的根类也应该定义一个虚构函数   P497

    19.如果在构造函数或析构函数中调用虚函数,则运行的是为构造函数或析构函数自身类型定义的版本   P497

    20.基类类型的指针(引用或对象)只能访问对象的基类部分   P49821.为基类成员函数名称而作的 using 声明将该函数的所有重载实例加到派生类的作用域,将所有名字加入作用域后,派生类只需要重定义本类型确实必须定义的那些函数,对其他版本可以使用继承的定义   P500

    21.要获得动态绑定,必须通过基类的引用或指针调用虚成员,因此,虚函数在基类和派生类中必须拥有同一原型,如果基类成员和派生类成员接受的实参不同,就没有办法通过基类类型的引用或指针调用派生类函数   P501

    22.含有(或继承)一个或多个纯虚函数的类是抽象基类,除了作为抽象基类的派生类的对象的组成部分,不能创建抽象类型的对象   P503

    23.句柄类经常需要在不知道对象的确切类型时分配已知对象的新副本,解决方法是定义虚操作进行复制,我们称这种操作为 clone  P507

    24.动态绑定仅在通过引用或指针调用时才能应用于声明为虚的函数,C++ 程序定义继承层次接口的句柄类很常见,这些类分配并管理指向继承层次中对象的指针,因此能够使用户代码在无需处理指针的情况下获得动态行为  P522

    25.动态绑定:延迟运行时才选择运行哪个函数,在C++ 中,动态绑定指的是在运行时基于引用或指针绑定的对象的基础类型而选择运行哪个 virtual 函数  P523

    26.动态类型:运行时类型,基类类型的指针和引用可以绑定到派生类型的对象,在这种情况下,静态类型是基类引用(或指针),但动态类型是派生类引用(或指针);多态性:指的是基于引用或指针的动态类型获得类型明确的行为的能力 P523

    27.派生类中定义的与基类成员同名的成员屏蔽基类成员,派生类中的成员函数不重载基类成员,基类中被屏蔽的成员可以用作用域操作符访问  P524

    28.

  • 相关阅读:
    前端学PHP之错误处理
    mysql数据库学习目录
    前端学数据库之存储
    前端学数据库之函数
    用shell脚本监控进程是否存在 不存在则启动的实例
    在notepad++里面使用正则表达式替换掉所有行逗号前面内容
    mysql合并 两个count语句一次性输出结果的方法
    硬件中断和DPC一直占40-52%左右 解决方法
    解决secureCRT 数据库里没有找到防火墙 '无' 此会话降尝试不通过防火墙进行连接。
    Java eclipse下 Ant build.xml实例详解 附完整项目源码
  • 原文地址:https://www.cnblogs.com/zhp218/p/8734642.html
Copyright © 2011-2022 走看看