我有 C 类,它继承自 A 类和 B 类。A 类是否可以使用这种继承访问 B 类函数(例如 fun1() )。A 和 B 都是独立的类,而 fun1() 只在 B 类中。
问问题
1301 次
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 回答