【发布时间】:2010-11-11 05:23:20
【问题描述】:
我使用 OOP 的一个重要原因是创建易于重用的代码。为此,Java 风格的接口是完美的。但是,在处理 C++ 时,我真的无法实现任何类型的功能,例如接口……至少不是很容易。
我知道纯虚拟基类,但真正让我感到震惊的是,它们强迫我编写带有指针的非常尴尬的代码。例如。 map<int, Node*> nodes;(其中 Node 是虚拟基类)。
这有时没问题,但有时指向基类的指针并不是一个可行的解决方案。例如。如果要返回打包为接口的对象,则必须返回指向该对象的基类转换指针。但是该对象在堆栈上,并且在返回指针后将不存在。当然,您可以开始广泛使用堆来避免这种情况,但这会增加太多的工作量(避免内存泄漏)。
有没有什么方法可以在 C++ 中实现类似接口的功能而不必笨拙地处理指针和堆? (老实说,对于所有的麻烦和尴尬 id,而只是坚持使用 C。)
【问题讨论】:
-
处理接口时根本不需要强制转换... Base *p = new Derived;完全有效。
-
这里乱七八糟的,我不知道真正的问题是什么。输入您真正的问题的代码,我们将解释您做错了什么。在 Java 中可以做的所有事情都可以在 C++ 中完成(在这个方向上没有任何限制)。您的问题可能在于 Java 和 C++ 之间的风格差异,现在两者之间的移动是如此不同。
-
这不是一个单一的编码问题,而是关于如何优雅地在c++中实现java风格接口的功能。事实上,我的整个帖子中有一个问题(最后,如果你读了它),剩下的就是阐述(不是漫无目的)。我不知道为什么你不明白,其他人做到了,并且已经提供了帮助。 (因此它有一个公认的答案。)
标签: c++ oop memory pointers interface