如何扩展没有源代码的 class?

How to extend class for which you don't have source code?

我有一个问题,我不知道如何开始解决这个问题。 我在 C++ 中这样做。

假设我们有一些可执行程序(UNIX 平台),我们可以通过输入 my_program 运行 这个程序。参数在这里 4 classes。每个 classes 都必须扩展 class,这是在目标程序中编写的(在 my_program 中)。

所以,比方说在 my_program 中我们有 class A、B、C 和 D。用户知道他必须扩展这个 classes,所以他创建了四个 child classes.

class A1 : public A { ... }
class B1 : public B { ... }
class C1 : public C { ... }
class D1 : public D { ... }

这可能吗? class是的,A、B、C 和 D 在 my_program 中,所以他可以以某种方式扩展它们吗?

C++ 不支持这种类型的继承。其他语言,如 C# 允许这样做。

虽然你可以写出这种派生的class,当:

  • 你的基础 class 的方法(尤其是 ctor/dector)是从 DLL 或 EXE 导出的;
  • 你有 header 基数的定义 class;
  • 您使用与 DLL 所用的相同的编译器和相同版本的编译器。

在这种情况下,您可以编写包含派生 class 的应用程序。这将是一个单独的二进制文件。它会将 DLL/EXE 加载到它的地址 space 中,并在需要时调用基 class 的方法。这是可能的,因为它们应该被导出,因为这在第一个项目符号中是必需的。