gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:45 27 4
gpt4 key购买 nike

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

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

virtual void draw(param);

和:

virtual void draw(param) = 0;

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

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

我是 C++ 的新手,总是觉得抽象类的构造函数/析构函数很神秘,尤其是编译器如何处理它们。

为了简单起见,我可以把它做成

virtual f(){};

纯虚函数/抽象类与上面的方式相比有什么优缺点?

最佳答案

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

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

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


第二个问题是纯虚函数会阻止类的直接实例化,即使类抽象。这是次要的,因为当没有合理的默认值时,在声明类的对象上调用函数就没有多大意义,所以它在那里是纯虚拟的并不重要。

关于关于纯虚函数的C++设计原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com