按部就班--区分接口继承和实现继承

目录

1.定义纯虚函数的目的在于,使派生类仅仅只是继承函数的接口。

这对 Shape::draw 函数来说非常有意义,因为,让所有 Shape 对象都可以被绘制是很合理,但 Shape 类无法为 Shape::draw 提供一个合理的缺省实现。例如,绘制椭园的算法就和绘制矩形的算法大不一样。打个比方来说,上面Shape::draw 的声明就象是在告诉子类的设计者,"你必须提供一个 draw 函数,但我不知道你会怎样实现它。

2.声明简单虚函数的目的在于,使派生类继承函数的接口和缺省实现。

具体到 Shape::error,这个接口是在说,每个类必须提供一个出错时可以被调用的函数,但每个类可以按它们认为合适的任何方式处理错误。如果某个类不想做什么特别的事,可以借助于 Shape 类中提供的缺省出错处理函数。也就是说,Shape::error 的声明是在告诉子类的设计者,"你必须支持 error 函数,但如果你不想写自己的版本,可以借助 Shape 类中的缺省版本。"

3.声明非虚函数的目的在于,使派生类继承函数的接口和强制性实现。

可以认为,Shape::objectID 的声明就是在说,"每个 Shape 对象有一个函数用来产生对象的标识符,并且对象标识符的产生方式总是一样的。这种方式由 Shape::objectID 的定义决定,派生类不能改变它。" 因为非虚函数表示一种特殊性上的不变性,所以它决不能在子类中重新定义

例子:ABC飞机飞行方式的整合

4.借助原理

纯虚函数必须在子类中重新声明,但它还是可以在基类中有自己的实现。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务