10.虚函数和多态

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:56   1758   0
  • 用虚函数继承

如何理解函数的继承,不应该从内存的角度理解函数的继承,因为

函数的继承继承的是调用权,即子类可以继承父类的函数

非虚函数:不希望子类重写

虚函数:希望子类重写

纯虚函数:希望子类一定要重写,因为父类没有定义

  • 虚继承

模板方法模式

在框架中,把固定应该写的先写好,留下不确定的部分,让其称为一个虚函数,

由子类去定义,子类对象直接调用父类方法,传入隐藏的this指针,通过this

指针找到子类重写的virtual Serialize()

父类CDocument中,有一个虚函数,希望子类一定要重写(因为定义为空),

我们看到子类在第25行重写了该函数

  • 继承加组合关系下的构造和析构

当子类中有父类的成分,又有组合在里面,先调用哪个析构函数呢?有待测试

当子类里有父类的成分,而父类里又有组合,构造函数由内而外 ,析构由外而内

  • 委托+继承

举一个实际的例子,我们同一个文件开多个窗口去观察,如果一个窗口有

变化,其他都要跟随变化,因为真正的数据只有一份,该如何设计

这是一个非常经典的解法,设计一个Subject存放数据,同时设计一个Observer

观察数据,可以让Subject拥有很多个Observer,方法是使用一个vector容器存储

Observer的指针,这就是委托,Observer可以被继承,其所有的子类都是 is-a

Observer,都可以放到 m_views 容器中,也就是有多个不同的人在看同一份数据,

Subject中,提供一个attach函数,将要参与观察的子类放到容器中,同时还应该有

注销的功能(此处没有设计),还应该有一个notify()函数,调用update()函数通知

各个观察者数据的改变,这就是观察者模式

  • 委托+继承

组件模式

原型模式

如果需要一个继承体系,创建一个未来才出现的子类,应该如何设计,一个解法是后面出现的子类,在子类中创造一个静态的自己LSAT,而这个静态的自己需要被父类看到,创建的时候调用私有

的构造函数 - LandSatImage,从而调用addPrototype(this);把自己挂载上去,所有的子类都可以这样做。在子类当中,还应该准备一个函数叫做clone(),来new自己,作出一个副本,

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP