2

我想知道我目前所做的是否是 C++ 的耻辱,或者是否可以。

我为计算目的编写代码。对于某些类,我使用具有虚拟性/多态性的普通继承方案。但是我需要一些类来进行密集计算,并且避免由于虚拟性而产生的开销会很棒。

基本上,我想在没有指针或重定向的情况下使用这些类:继承只是为了避免大量复制/粘贴代码(基类的文件大小为 60Ko(这是很多代码))。所以没有虚函数,也没有虚析构函数。

我想知道从 C++ 的角度来看它是否完全可以,或者它是否会产生副作用(相关类将在程序中大量使用)。

非常感谢你。

4

6 回答 6

5

在 C++ 中使用多态性既不好也不坏。多态性是有目的的,缺乏多态性也是如此。使用继承而不单独使用多态性并没有错。

由于多态性是有目的的,而缺乏多态性也是有目的的,因此您应该在设计类时牢记这些目的。例如,如果您需要将行为运行时绑定到类实例,则需要多态性。

话虽如此,选择一种方法而不是另一种方法有正确和错误的原因。如果您严格地设计没有多态性的类,因为您想“避免开销”,这可能是一个错误的原因。这是一个过早优化的例子,只要您在没有分析您的代码并证明多态性是一个实际问题的情况下进行设计更改或决策。

首先按架构要求设计。如果设计被证明是非性能的,稍后返回并重构。

于 2012-05-23T13:10:05.377 回答
4

我会改写这个问题:

如果您避开多态性,继承会带来什么组合无法实现?

如果答案是否定的,我怀疑,那么也许一开始就不需要继承。

于 2012-05-23T13:16:02.633 回答
3

不使用virtual成员/继承是完全可以的。C++ 旨在娱乐广大观众,它不会将任何人限制在特定的范式中。

您可以使用 C++ 编写过程、通用、面向对象或它们的任何组合。只是尽力做到最好。

我目前正在做的是 C++ 的耻辱,或者如果它还可以。

一点也不。
相反,如果您不需要 OO 设计并且仍然仅仅为了它而强加它,那将是一种耻辱。

基本上,我想在没有指针或重定向的情况下使用这些类......

事实上,你正朝着正确的方向前进。使用指针、数组和这样的低级特性更适合高级编程。改用 like std::shared_ptrstd::vector和 标准库容器。

于 2012-05-23T13:06:21.717 回答
1

基本上,您正在使用没有多态性的继承。没关系。

面向对象编程具有多态性以外的其他特性。如果您可以从中受益,请使用它们。

于 2012-05-23T13:11:31.373 回答
1

一般来说,使用继承来重用代码并不是一个好主意。继承是由旨在使用您的基类的代码使用的我会建议一种不同的方法来解决这个问题。考虑一些替代方案,例如组合,更改要在自由函数而不是基类中实现的功能,或静态多态性(通过使用模板)。

于 2012-05-23T13:41:49.983 回答
0

在您能够证明之前,这不是性能问题

查看该答案和“最快的代表”文章。

于 2012-05-23T13:22:04.773 回答