zoukankan      html  css  js  c++  java
  • 类中的“根据某物实现出”关系

    C++中,表达“is implemented in terms of(根据某物实现出)”关系有两种方法:复合与private继承。

    复合很好理解,就是在类中包含另一个类对象,这在面向对象设计中是常用的方法。

    class Address {...};
    class Person
    {
    public:
           ...
    private:
           Address address;
    };
    

    与public继承不同,private继承不代表基类和子类之间的“is-a”关系,它往往意味着子类“is implemented in terms of”基类。

    class Timer
    {
    public:
         explicit Timer(int tickFrequency);
         virtual void onTick() const; 
    };
    
    class Widget:private Timer
    {
    private:
          virtual void onTick() const;
    }
    

    在上面的代码例子中,Widget类需要用到Timer类中的一部分功能,于是它私有继承了Timer类,并重载了Timer的onTick函数。

    相比于复合,私有继承的好处在于,它可以访问基类的protected成员,并重载基类的virtual函数。但这利用复合实际上也可以做到,如下所示:

    class Widget{
    private:
         class WidgetTimer:public Timer
         {
          public:
                 virtual void onTick() const;
         };
         WidgetTimer timer;
    }
    

    这样是不是更灵活了?这样设计,可以使该类的子类无法再继续重载onTick函数,有点类似Java里的final功能。而且,这样实现可以降低代码的编译依存性。

  • 相关阅读:
    log4j中Spring控制台输出Debug级信息过多解决方法
    spring使用aop
    过滤器(filter)实现用户登录拦截
    Eclipse将项目部署tomcat的webapps目录
    css初始化样例代码
    dede表单修改默认必填
    DedeCMS提交自定义表单加入验证码功能
    jQuery入门第三天
    jQuery入门第二天
    jQuery入门第一天
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/6232912.html
Copyright © 2011-2022 走看看