在现实中,我们往往会将事物的共性抽象出来并命名,例如交通工具就是抽象了飞机和汽车等物体的共性后命名的概念,它实际上并不能独立存在。在说起人的时候我们至少会有一个模糊的形象,等到需要具体化时才会分男人、女人、老人和小孩。而我们在提到交通工具的时候也是连它的形状都不能确定,只知道它能移动和载人载物。
所以,在实际编程中我们不会创建出这样一个抽象的类对象,并给予图像图形。在面向对象设计的时候,我们并不想实现虚函数在基类中的版本,既然不创建对象分配内存,我们也没有使用虚函数的机会。
对于这种情况,我们可以简单地把基类虚函数的函数体空着。但是如果程序员不小心创建了基类对象,没有行为的虚函数就会导致异常,而且非常难调试:
动手写9.2.5
动手写9.2.5展示了基类虚函数实现空缺可能带来的问题,运行结果如图9.2.4所示:
图9.2.4 基类虚函数实现空缺(www.xing528.com)
当我们不小心创建了Vehicle类的对象时,由于虚函数没有实现,我们只能在输出窗口看到一行输出。接下来,我们就必须花时间来调试这一问题。
为了让面向对象设计的语义更加清晰,以及避免动手写9.2.5中的情况,C++提供了纯虚函数(Pure Virtual Function)这一特性。我们先来看一下示例:
动手写9.2.6
动手写9.2.6展示了实例化带有纯虚函数的基类的效果。编译器会报出如图9.2.5所示错误:
图9.2.5 纯虚函数
在基类的虚函数签名后面加上“= 0”,这样就把虚函数声明为纯虚函数。这样做的目的有两点:第一点是跳过函数实现,第二点是将该类声明为抽象类(Abstract Class)。一旦一个类成为了抽象类,由于它并不是完整实现的,少了虚函数的实现,我们就不能实例化,也就是不能创建抽象类的实例。这样的抽象类往往只是提供了一个类的说明,就像产品简介一样,而我们实际使用的还是产品,也就是派生类。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。