0

假设您要创建 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    
}
4

2 回答 2

2

您的示例正在倒退:接口应该独立于具有所有纯虚拟方法的任何具体类定义:

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(); } 
}
于 2013-08-09T13:00:47.693 回答
1

在前面,我不喜欢接口(它们是由 C++ 以外的其他语言发展而来的)。无论如何,如果你有一个,它应该是完整的:因此将'tii() 作为一个纯虚函数'。为了解决冲突,在“Derived”中重写该函数(转发到 Base::tii)。

于 2013-08-09T14:44:43.480 回答