Pat*_*tou 10 c++ virtual inheritance multiple-inheritance
我需要帮助实现使用接口的多重继承...
存在具有许多功能的接口的现有代码.实例是使用工厂创建的.
class IBig
{
// Lot of pure virtual functions
};
Run Code Online (Sandbox Code Playgroud)
他的补充:
class CBig: public IBig
{
// Implementation
}
Run Code Online (Sandbox Code Playgroud)
我想在多个较小的接口中拆分接口,但它应该与现有代码保持一段时间兼容.
以下是我尝试做的一个示例:
class IBaseA
{
public:
virtual void DoA() = 0;
};
class IBaseB
{
public:
virtual void DoB() = 0;
};
// The same interface, now based on multiple smaller interfaces
class IBig : public IBaseA, public IBaseB
{
};
class CBaseA: public IBaseA
{
public:
virtual void DoA()
{
printf("DoA\n");
}
};
class CBaseB: public IBaseB
{
public:
virtual void DoB()
{
printf("DoB\n");
}
};
// Inherit from base classes where the implementation is, and from IBig as
// the instance of CBig is returned as IBig.
class CBig: public CBaseA, public CBaseB, public IBig
{
};
Run Code Online (Sandbox Code Playgroud)
这里的问题是CBig类不能实例化.编译器说DoA和DoB函数是纯虚函数,即使它们是在CBaseA和CBaseB中实现的.如果我不想再次实现这些函数,只需要调用基类的函数,该怎么办?
注意:我知道设计是丑陋的,但这只是暂时的,直到可以更换大界面,并且....我想了解!;-)
提前致谢 !
Tar*_*ama 14
在这里你应该使用虚拟继承.此功能可确保在实例化子类时,只有一个虚拟继承的基类实例.对于您的示例,这看起来像:
#include <cstdio>
class IBaseA
{
public:
virtual void DoA() = 0;
};
class IBaseB
{
public:
virtual void DoB() = 0;
};
// The same interface, now based on multiple smaller interfaces
class IBig : virtual public IBaseA, virtual public IBaseB
// ^ ^
{
};
class CBaseA: virtual public IBaseA
// ^
{
public:
virtual void DoA()
{
printf("DoA\n");
}
};
class CBaseB: virtual public IBaseB
// ^
{
public:
virtual void DoB()
{
printf("DoB\n");
}
};
// Inherit from base classes where the implementation is, and from IBig as
// the instance of CBig is returned as IBig.
class CBig: public CBaseA, public CBaseB, public IBig
{
};
int main()
{
CBig cb;
}
Run Code Online (Sandbox Code Playgroud)
上述变化确保不会有额外的声明DoA,并DoB当您从继承创建IBaseA和IBaseB多次.
| 归档时间: |
|
| 查看次数: |
3219 次 |
| 最近记录: |