虚函数 和多态

继承 搭配 虚函数

成员函数前 加virtual

函数的继承 继承的是调用权。

虚函数:希望对子类 重新定义(override重写),且已有默认定义

纯虚函数:一定要重新定义。纯虚函数是可以有定义的。
虚函数 和多态

相关设计

委托与继承的设计模式

功能最强大的一种。
虚函数 和多态
关系:
虚函数 和多态
虚函数 和多态

  • 这是一种Observer的设计模式,适用于如有一份文件,多个窗口查看或者一份数据,有多种视图显示;;
  • 示例中Subject是数据类,Observer是显示类,可以被多个observer继承实现不同方式的查看。

这种解法叫做 composite:
虚函数 和多态
注意点:
a、这是一种Composite的设计模式,要使Composite类中容器能容纳左边和右边的数据,所以设计一个Component的父类;
b、容器中只能放指针对象,因为指针的大小相同
虚函数 和多态
在ui设计中,数据改变,窗口展示也改变。
虚函数 和多态
所以subject类要提供一个注册跟注销的函数。
attach就是一个注册的函数,将子类对象放入。
还应该有个notify函数,将内容里的所有观察者都遍历。里面调用观察者的update来更新ui

Prototype(原型)

虚函数 和多态
注意点:
a、这是Prototype的设计模式,主要适用于现在创建未来的class对象,因不清楚未来类的名字;
b、未来对象是通过原型来创建的(必须运用事先搭好的框架),首先创建静态的对象,然后调用默认构造函数来通过原型创建对象。
c、类中的静态变量要在类外部定义。

要去创造未来的子类对象。。

子类你们自己创建自己。只要你们创建的东西我父类看得到。

上图中。下划线表示的 是 静态对象,先写的变量名,后写的类型名。
负号 - 代表private,正号+代表public,#代表protected。

子类构造函数设计为私有的。子类构造函数里调用父类的addPrototype,将子类对象指针放到父类里面去。
子类重写的clone()要做的事,是new一个自己。

如果没有原型的话,就没有办法通过对象调用clone元素。