假设我有2个班级:
struct a
{
void test();
};
struct b
{
void test();
};
现在让我们继承这些类:
class c : public a, public b
{
};
调用c::test()
会产生错误,因为class a
和class b
具有相同的功能void test()
,现在我的问题是:
是否可以继承那些(非虚拟!)函数,并且在调用c::test()
时都会执行?
答案 0 :(得分:4)
为此,您需要在void test()
中实施c
,并调用这两种方法。没有自动的方法。
class c : public a, public b
{
public:
void test() {
a::test();
b::test();
}
}
但是,我强烈建议您不要在派生类中重新实现非虚函数。问题是,即使它们在同一个对象上运行,下面也会悄悄地调用不同的函数:
c* p1 = new c();
a* p2 = p1;
p1->test();
p2->test();
答案 1 :(得分:0)
你的前提是错的;继承自a
和b
不是错误。试图调用c::test()
是一个错误,因为它的解决方案不明确。但是,您可以覆盖test()
中的c
,例如在this->a::test();
中明确调用this->b::test();
和void c::test();
。