高质量C/C++编程之类的继承和组合

对于C++程序而言,设计孤立的类比较容易,难的是正确设计基类及其派生类。
当前面向对象技术的应用热点是COM和CORBA

1.继承Inheritance

规则1: 如果类A和类B毫不相关,不可以为了B的功能更多些,而让B继承A的功能和属性
规则2: 若在逻辑上B是A的一种”a kind of“,允许B继承A的功能和属性
规则3: 继承的概念在程序世界和现实世界并不完全相同
        在数学上,圆circle是一种特殊的椭圆ellipse,但是圆继承椭圆的长轴和短轴是不推荐的。
综合来讲:若在逻辑上B是A的”一种“,并且A的所有功能和属性对于B来说都是有意义的,则允许B继承A的功能和属性。

2.组合composition

规则1:如果在逻辑上A是B的一部分a part of,则不允许B从A派生,而是要用A和其他东西组合出B。
class Eye{
    public: void Look(void);
}
class Nose{
    public: void Smell(void);
}
class Mouth{
    public: void Eat(void);
}
class Ear{
    public: void Listen(void);
}
class Head{
    public:
        void Look(void){ m_eye.Look();}
        void Smell(void){ m_nose.Smell();}
        void Eat(void){ m_mouth.Eat();}
        void Listen(void){ m_ear.Listen();}
    private:
        Eye m_eye;
        Nose m_nose;
        Mouth m_mouth;
        Ear m_ear;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值