【发布时间】:2018-03-10 04:09:03
【问题描述】:
多重继承有点问题。我有一个 C 类,它有两个基类 A 和 B。A 是主要基类,B 提供专业化。但是,B 需要能够调用属于 A 的方法。
我的问题是,如何将 A.foo() 暴露给 B 以便可以调用它?我一直在疯狂地搜索和阅读,但我找不到任何适合我的场景的东西。我尝试了模板类,但这又打开了一个蠕虫罐。我尝试了各种虚函数,但充其量都是导致链接器错误。
这基本上就是我想要做的……
class A
{
public:
void foo() { std::cout << "Hello there!"; }
};
class B
{
public:
void bar() { foo(); } // Call A::foo() here somehow
};
class C : public A, public B
{
};
int main( void )
{
C _test;
_test.bar();
}
有没有人对我有什么建议?我还尝试使用另一个 A 和 B 都派生自的类,然后使用虚拟继承和姐妹类,但我也无法让它工作。
class Z
{
public:
virtual void foo()=0;
};
class A : public Z
{
public:
void foo() { std::cout << "Hello there!"; }
};
class B : public Z
{
public:
void bar() { foo(); }
};
class C : public A, public B
{
public:
// virtual void foo();
};
int main( void )
{
C _test;
_test.bar();
}
任何建议都将不胜感激,因为这是我需要实现的主要功能……不知何故。 :)
【问题讨论】:
-
在B中定义一个虚方法,在C中实现后调用A中的方法。
-
是的,这行得通。没有我希望的那么优雅,因为理想情况下,C 应该对 A 或 B 的实现一无所知,但至少它是一个可行的解决方案。非常感谢。
标签: c++ inheritance derived virtual-functions