我有多个遗传问题。我有一个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();
}
任何建议都会非常感激,因为这是我需要实现的一个主要功能......不知何故。 :)
答案 0 :(得分:1)
这是Sam Varshavchik建议的实施方案。它不需要额外的基类,因此它有点精简并且工作得很好。
class A
{
public:
void foo() { std::cout << "Hello there!"; }
};
class B
{
public:
virtual void foo() = 0;
void bar() { foo(); }
};
class C : public A, public B
{
public:
void foo() { A::foo(); }
};
int main(int argc, const char * argv[])
{
C _test;
_test.bar();
}
答案 1 :(得分:0)
A::foo()
是一个类成员函数。要调用它,您必须具有类实例指针,或使其成为静态。如果B
必须调用A
方法,则可能应该从A
派生。其他解决方案是重新处理整个类层次结构,以将函数调用移动到类,派生自A
和B
。您也可以将A
指针传递给B
构造函数,以便从那里调用它。