0

我有 C 类,它继承自 A 类和 B 类。A 类是否可以使用这种继承访问 B 类函数(例如 fun1() )。A 和 B 都是独立的类,而 fun1() 只在 B 类中。

4

3 回答 3

1

不严格通过继承。虽然 A 和 B 是 C 的父母,但 A 和 B 没有关系,也没有办法互相访问。

可以通过继承和多态,然后类A有一个虚方法,C实现调用B中的函数,像这样:

class A {
public:
  b get_b() { return do_get_b(); }
private:
  virtual do_get_b() = 0;
};

class B {
public:
  b some_b;
};   

class C : public A, public B {
private:
  virtual do_get_b() {return some_b;}
}
于 2012-04-25T06:45:49.210 回答
1

您可以使用 dynamic_cast 检查您的 A 对象是否真的是 C 的对象,从而是 B

void A::foo()
{
    B* pB = dynamic_cast<B*>(this);
    if (pB) pB->bar();
}

但是,如果 A 和 B 真的相互独立,那么找到不同的解决方案可能会更好。

于 2012-04-25T07:01:42.713 回答
0

有时,这是可能的。一个如何实现这一点的例子。

该示例适用于菱形层次结构,它比您的要复杂一些。用您的话来说,ClassA 和 ClassB 应该是从类 Base 派生的,ClassC 是从 ClassA 和 ClassB 派生的。

于 2012-04-25T06:41:01.527 回答