non-virtual 函數(非虚函数) 你不希望子类重新定义(override, 覆写) 它
virtual 函數(虚函数):你希望子类重新定义 (override, 覆写) 它,且你對它已有默認定义
pure virtual 函數(纯虚函数):你希望子类一定要重新定义 (override 覆写) 它,你對它沒有默認定义, 函数=0
继承与虚函数可以实现模板方法设计模式
模板方法主要思想:
①定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
②模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
Q: 为什么不是调用父类CDocument的默认Serialize(), 而是调用子类覆写的?
A: 因为main()中创建的对象类型是CMyDoc, 自然调用对应的函数
案例如下:
案例实操如下:
结果为:
上图是按照侯捷老师给的代码, 我改了虚函数定义, 将空的虚函数变成纯虚函数.
不对纯虚函数进行覆写, 报错如下:
以下这段话是摘自其它博主大大的, 不是原创哦!
虚函数的一个重要概念: 多态
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数