# 输出:[66, 20, 10, 99]
虚函数 vs 纯虚函数,如何选用?
- 当基类中的某个成员方法,在大多数情形下都应该由子类提供个性化实现,但基类也可以提供缺省备选方案的时候,该方法应该设计为虚函数。
- 当基类中的某个成员方法,必须由子类提供个性化实现的时候,应该设计为纯虚函数。
构造函数和析构函数可以是虚函数吗?
答案是:构造函数不能是虚函数,析构函数可以是虚函数且推荐最好设置为虚函数。
首先,我们已经知道虚函数的实现则是通过对象内存中的vptr来实现的。而构造函数是用来实例化一个对象的,通俗来讲就是为对象内存中的值做初始化操作。那么在构造函数完成之前,也即还没有进行初始化,此时vptr是没有值的,也就无法通过vptr找到作为构造函数和虚函数所在的代码区,所以构造函数只能以普通函数的形式存放在类所指定的代码区中。
而对于析构函数,当我们delete(a)的时候,如果析构函数不是虚函数,那么调用的将会是基类base的析构函数。而当继承的时候,通常派生类会在基类的基础上定义自己的成员,此时我们当然希望可以调用派生类的析构函数对新定义的成员也进行析构。
vptr即 虚指针。
if 语句没有else 时 则会跳过往下执行 处理报错等 先对其预处理 避免代码走错
在此基础上,初步认识多态特性,可移步...