类的继承与组合

类的继承与组合

1.继承

如果A 是基类,B 是派生类,那么B将继承A 的数据和函数

class A
{

public:
   void fun1(void);
   void fun2(void);

};
class B
{
public:
   void func3(void);
   void func4(void);
};
int main()
{
  B b;
  b.fun1();//B从 A继承了函数fun1();
  b.fun2();//B从A继承了函数fun2();
  b.fun3();
  b.fun4();
  return 0;
}

C++“继承”特性可以提高程序的可复用性,但是要防止滥用“继承”。

使用继承的规则:

(1)如果类A与类B毫不相关,不可以为了增加B的功能而让B继承A的功能与属性,

(2)如果B是A的一种,则允许B继承A 的功能与属性,例如,男人是人的一种,男孩是男人的一种,那么man 可以在Human 中派生,Boy可以在man 中派生。

注意事项:

继承的概念在程序中与现实生活中并不完全相同,

比如说鸵鸟是鸟的一种,按理来说,应该从鸟类派生,但是鸵鸟不能飞,

圆是一种特殊的椭圆,按理来说,圆可以从椭圆中派生,但是椭圆有长轴和短轴,圆继承了长轴和短轴多此一举。

更加严格的规则是:如果逻辑上B属于A 的一种,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性。


1.组合

如果逻辑上A是B的一部分,则不允许B从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、付费专栏及课程。

余额充值