关于纯虚函数的C ++设计原理?

迪亚兹

我最近一直在研究游戏程序。我制作了一个称为Drawable的基类,指示可能需要(并且可以)绘制到屏幕上的东西。

显然,我从Drawable派生了很多类,每个类都有自己的draw()函数实现。现在,对于Drawable我有两个选择:

virtual void draw(param);

和:

virtual void draw(param) = 0;

现在,让我们看一下另一个类(例如Scene),该类可能包含一堆Drawable实例,这些实例存储在向量中。多态性使得可以迭代地调用每个存储对象的draw()函数。

那么,就OOP设计而言,哪种方法更好呢?

我是C ++的新手,总是发现抽象类的con / destructors神秘,尤其是编译器如何对待它们。

简而言之,我可以将其替换为一个带有纯虚函数f()= 0的抽象类,而不是

virtual f(){};

与上述方法相比,纯虚函数/抽象类的优点/缺点是什么?

干杯和hth。-阿尔夫

最重要的问题是该函数在最顶层的声明类中是否可以具有合理的默认值,例如什么也不做。

如果是这样,那么为什么不提供默认值:这很方便。

但是,如果不是,请使其成为纯虚拟的。在最初的Smalltalk中,IIRC并未将方法声明为类似于纯虚拟的方法,而是让实现引发异常“子类责任”。这就是纯虚拟的本质,它不能在基类中合理地指定,但必须由每个派生类定义。


第二个问题是,纯虚函数阻止类的直接实例化,即使类抽象化。这是次要的,因为当没有合理的默认值时,在声明类的对象上调用该函数就没有什么意义,因此,在那儿纯粹是虚拟的没关系。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++纯虚函数调用的性能差异

来自分类Dev

推导纯虚函数的实现

来自分类Dev

C ++ 11线程,错误调用了纯虚函数

来自分类Dev

纯虚函数覆盖虚函数

来自分类Dev

如何实现纯虚函数

来自分类Dev

D中的C ++ DLL(纯虚函数)

来自分类Dev

C ++ 11构造函数继承和纯虚方法

来自分类Dev

奇怪的行为C ++纯虚函数

来自分类Dev

专用纯虚函数的目的?

来自分类Dev

使用纯虚函数定义在C ++类之外?

来自分类Dev

if / else与虚函数:设计性能

来自分类Dev

关于C ++中的虚函数继承的难题

来自分类Dev

C ++将基本类型传递给纯虚函数

来自分类Dev

从operator <<调用纯虚函数

来自分类Dev

具有可变返回类型的纯虚函数的功能-解决方法/设计?

来自分类Dev

Windows Forms Designer,“设计”>“ GenerateMember”背后的原理

来自分类Dev

纯虚函数实现

来自分类Dev

C ++标准库中是否有纯虚函数?

来自分类Dev

Kotlin构造函数的语法设计原理?

来自分类Dev

纯虚函数覆盖虚函数

来自分类Dev

D中的C ++ DLL(纯虚函数)

来自分类Dev

C ++ 11中的纯虚函数

来自分类Dev

奇怪的行为C ++纯虚函数

来自分类Dev

C ++:通过调用纯虚函数避免重复

来自分类Dev

使用纯虚函数在C ++类之外定义?

来自分类Dev

开放/封闭原理OO类设计

来自分类Dev

从operator <<调用纯虚函数

来自分类Dev

编译时纯虚函数

来自分类Dev

具有纯虚函数的模板类的C ++语法?