c++ - 使用纯虚函数在两个或多个库之间共享一个类的功能

标签 c++ virtual-functions

没关系,

拥有:

class A
{
    virtual x() = 0;
    virtual y() = 0;
}

class B
{
    virtual x() = 0;
    virtual z() = 0;
}

class C : A , B
{
    x();
    y();
    z();
}

与两个只知道 A 而另一个只知道 B 的库共享类 C 的实例?

喜欢:

图书馆 1:

#include <a>

A* a = function_in_the_core_that_creates_a_C_and_retrieves_it();
a->x();
a->y();

图书馆 1:

#include <b>

B* b = function_in_the_core_that_creates_a_C_and_retrieves_it();
b->x();
b->z();

我问这个是因为我想知道编译器是否会在解析函数时遇到问题,因为库不完全了解 C 的祖先。

编辑:

function_in_the_core_that_creates_a_C_and_retrieves_it() 应该返回 C* 而不是 C。我认为这很清楚,因为我们正在谈论虚函数。

最佳答案

你真的应该编译代码。 C 私下继承了 A 和 B,所以这个例子不会运行。 class C : public A , public BC 的更正声明。您还缺少函数的返回类型。

要么 function_in_the_core_that_creates_a_C_and_retrieves_it 将返回一个 B*,然后它将符合 B 的完整祖先并作为 B 用于所有意图和目的 - 否则它将返回 C*,在这种情况下,您必须提供完整的 C 声明才能进行分配在没有明确类型转换的情况下工作。你不能让 C just forward declared 来做这件事。

因此,您要么返回一个指向 B 的指针,在这种情况下没有问题 - 或者返回一个指向 C 的指针,您需要在其中提供完整的祖先为了在没有潜在危险的情况下进行分配。

关于c++ - 使用纯虚函数在两个或多个库之间共享一个类的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9464867/

相关文章:

c++ - 使用后缀自动机的最长公共(public)子串

c++ - 插入和合并排序不适用于大数据集 C++

c++ - 为什么调用基函数呢?

c++ - 可以从纯虚函数返回引用吗?

c++ - Linux 应用程序无法从 169.254.x.x(本地链接)获取 UDP 消息

c++进程cpu使用率跳转导致检测

c++ - 是否可以重载(影子)虚函数?

c++ - 从抽象(纯虚拟)类私有(private)继承是否有意义?

c++ - 在 GCC 中替换 "fvtable-gc"

c++ - 在抽象类中实现纯虚函数——有什么用吗?