6.继承与面向对象设计

来源:互联网 发布:数据挖掘异常检测方法 编辑:程序博客网 时间:2024/05/29 17:50

条款32:确定你的public继承塑模出is-a关系

  • public inheritance 意味“is-a的关系”
  • 如果令class A以public形式继承class B,则意味着每一个类型为A的对象同时也是一个类型为B的对象,反之则不成立。也意味着适用于class B身上的每一件事情一定也适应于class A上

条款33:避免遮掩继承而来的名称

  • 适应情况:在base classes中的某个函数有几种overload类型,在derived classes中要对base classes中某一个重载函数进行override,此时会覆盖base classes中所有该重载函数
        class CBase
        {
                  void   f1();
                  void   f1(int);
          }
         class CDerived : public CBase
         {
                 void   f1(int);
         }

         CDerived d;
         d.f1(3);  //ok, 调用CDerived:void f1(int)
         d.f1();    //错误!因为CDerived:f1()遮掩了CBase:f1()
  • derived classes内的名称会遮掩base classes内的名称
  • 为了让遮掩的名称再见天日,可使用using 声明式或转交函数
         
         class CDerived : public CBase
         {
                 using CBase:f1;
                 void   f1(int);
         }

         
          CDerived d;
         d.f1(3);  //ok, 调用CDerived:void f1(int)
         d.f1();    //ok, 调用CBase:void f1()


原创粉丝点击