假设我有 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()
调用两者都被执行?
假设我有 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()
调用两者都被执行?
为此,您需要实现void test()
inc
并调用这两个方法。没有自动的方法可以做到这一点。
class c : public a, public b
{
public:
void test() {
a::test();
b::test();
}
}
但是,我强烈建议您不要在派生类中重新实现非虚函数。问题是下面会悄悄地调用不同的函数,即使它们在同一个对象上操作:
c* p1 = new c();
a* p2 = p1;
p1->test();
p2->test();
你的前提是错误的;继承自a
并且b
不是错误。尝试调用c::test()
是一个错误,因为它的分辨率不明确。但是,您可以随意覆盖test()
in c
,例如通过显式调用this->a::test();
and this->b::test();
in void c::test();
。