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.使用继承扩展接口
UPDATE
我要的是IB
包括IA
的界面,如下所示。但是,由于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()
{
}
};
'IB'和'IA'没有任何相互关系。很难知道你想通过传递'IB *'来做什么,而函数期望' IA *' –
为什么不直接将'&b'传递给'f'? – unkulunkulu