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)
不,他们没有.从接口继承(直接或间接)的所有类必须virtual在继承树中的某处实现纯函数才能实例化.
因此,您可以在基类或顶级类中实现该方法.
此外,您的语法很远:
class A : public Interface
{
std::string getName()
{
return std::string("A");
}
};
Run Code Online (Sandbox Code Playgroud)
上面应该工作,即使它不是从中派生出来的Base,因为你实现了纯虚方法Interface.
建议 - 制定你的getName方法const.