我误解了c ++纯虚函数和接口的东西

use*_*898 0 c++ inheritance pure-virtual

我喜欢在几个类中定义良好的接口,为此我在每个类需要实现的抽象类中创建了纯虚函数.
但我面临的问题是我可以实例化类,所以我必须创建另一个继承接口类的类,所有其他类都需要从这个基类继承.以下是代码示例:

界面

class Interface
{
     virtual std::string getName() = 0;
}

class Base : public Interface
{
   virtual std::string getName(return std::string("Base") ;)
}

class A : public Base
{
  std::string getName(return std::string("A") ;)

}

class B : public Base
{
  std::string getName(return std::string("B") ;)

}
Run Code Online (Sandbox Code Playgroud)

所有这些所以我可以在代码中为A和B提供相同的类型.
我可以只使用Interface没有Base类的类吗?
像这样的东西:

class A : public Interface
{
  std::string getName(return std::string("A") ;)

}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 6

不,他们没有.从接口继承(直接或间接)的所有类必须virtual在继承树中的某处实现纯函数才能实例化.

因此,您可以在基类或顶级类中实现该方法.

此外,您的语法很远:

class A : public Interface
{
  std::string getName()
  {
      return std::string("A");
  }
};
Run Code Online (Sandbox Code Playgroud)

上面应该工作,即使它不是从中派生出来的Base,因为你实现了纯虚方法Interface.

建议 - 制定你的getName方法const.

  • ..而不是私人的. (4认同)