具有子类的类的纯接口
Pure interface of a class with subclasses
让我们假设您想要创建Derived类的接口,它看起来像这样:
class Derived : public Base
{
public:
foo();
}
class Base
{
public:
tii();
//many other methods
}
你会怎么做界面?如何使Base::tii对这个新接口可见(以及其他方法)?
class IDerived
{
public:
virtual foo() = 0;
// should I declare here tii() as a pure virtual function?
// but by doing it now there is ambiguity!
}
什么是好的策略?
新的派生类应该是这样的。。。。
class Derived : public Base, public IDerived
{
//implement the real thing
}
您的示例是向后做的:接口应该独立于任何具有所有纯虚拟方法的具体类来定义:
class IDerived
{
public:
virtual void foo() = 0;
virtual ~IDerived() {} // don't forget to include a virtual destructor
}
具体的类将从接口公开派生:
class Derived : public Base, public IDerived
{
public:
void foo();
}
如果您希望IDerived
也声明Derived
从Base
继承的方法,您可以通过调用继承的实现来让Derived
显式地实现该方法:
class Derived : public Base, public IDerived
{
public:
void foo();
void bar() { Base::bar(); }
}
在前面,我不喜欢接口(它们是由c++以外的其他语言开发的)。无论如何,如果你有一个,它应该是完整的:因此,把"tii()作为一个纯虚拟函数"。若要解决冲突,请在"Derived"中重写该函数(转发到Base::tii)。
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 避免在C++中重复子类定义
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 如何初始化矢量的模板化子类
- 是具有接口专用化的子类多态的模板实例化
- C++接口实现和子类化对象识别
- 必须具有泛型接口的函数,但必须根据传递的子类(不知道它们是什么!)以不同的行为 - C++
- 如何在基类中实现子类迭代器的统一接口?
- 基类c++的子类的通用设计接口
- 指向子类构造函数中接口类函数的函数指针
- C++从接口类到子类的转换无效
- 防止在C++中对抽象类接口进行子类化
- 如何通过多态基类接口使用模板化的子类
- 具有子类的类的纯接口
- 使用继承接口的类的子类方法
- 将c++接口实例化为子类