class IA
{
public:
virtual void a() = 0;
};
class A: public IA
{
public:
virtual void a()
{
}
};
class IB
{
public:
virtual void b() = 0;
};
class B: public IB, public A
{
public:
virtual void b()
{
}
};
void f(IA* p)
{
}
int main()
{
B b = B();
IB* p = &b;
f(p);
}
这是在 C++ 中实现具有继承的接口的正确方法吗?如果是这样,我如何让f(p);
我的代码中的行编译?基本上,我想如果IB
可以继承自IA
,但这会给 B 带来问题。
更新
我想要的是IB
includeIA
的接口,如下。但是,此代码将无法编译,IA::a()
并且A::a()
彼此冲突。我应该怎么办?
class IA
{
public:
virtual void a() = 0;
};
class A: public IA
{
public:
virtual void a()
{
}
};
class IB : public IA
{
public:
virtual void b() = 0;
};
class B: public IB, public A
{
public:
virtual void b()
{
}
};
更新 2
这编译,它看起来正确吗?我需要所有这些虚拟
class IA
{
public:
virtual void a() = 0;
};
class A: virtual public IA
{
public:
virtual void a()
{
}
};
class IB: virtual public IA
{
public:
virtual void b() = 0;
};
class B: virtual public IB, public A
{
public:
virtual void b()
{
}
};