假设我有 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();。