多态——虚机制

静态多态和动态多态:

多态性:相同的消息请求执行不同的代码体,从而有不同的行为后果

静态多态:根据目标对象的静态类型和参数表中参数的静态类型确定目标代码体

                 1.模板—不同的模板参数

                 2.函数重载

动态多态:1.根据目标对象的动态类型和参数表中参数的静态类型确定目标代码体(虚机制

                   2.根据目标对象的动态类型和参数表中参数的动态类型确定目标代码体(c++不支持)

虚机制的作用:

一种实现动态多态的方法

在保持客户端访问接口不变的前提下,变更类的实现

通过子类型化,适应变化

Parent* p=new child;  //Praent是父类,child是子类
p->Func();    //可以把上面的child改成别的子类,而这个代码不需要改变


child my;
Parent & obj=my;
obj.Func();


void Proc(Parent* p){
   p->Func();
}

应用例:

1.父类提供接口,子类提供具体实现

2.父类提供框架,子类提供细节

3.虚拟的构造函数

虚机制的不足:

只使用虚机制,难以适应多个方向的变化

class Parent{
public:
   virtual ~Parent();
   virtual void F();
   virtual void G();
   virtual void H();
 //.......................
};

/* 如果F()有两种不同的实现变化,G()有三种不同的实现变化
   H()有四种不同的实现变化
   那么需要派生24个子类
*/

所以通常使用水平(依赖+关联)+继承

class Parent{
public:
   Parent(F*,G*,H*);
   virtual ~Parent();
   void F(){pF->F()}
   void G(){pG->G()}
   void H(){pH->H()}
private:
  F* pF;
  G* pG;
  H* pH;

};


class F{
public:
  virtual ~F(){}
  virtual void F(){
.......................
}

};

class G{
public:
  virtual ~G(){}
  virtual void G(){
.......................
}

};

class H{
public:
  virtual ~H(){}
  virtual void H(){
.......................
}

};


这样就只需要2+3+4个派生类

将一个类的多个方向用水平关系变成了多个类的单个方向

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值