抽象接口继承
Abstract interface inheritance
必须始终在派生类中实现虚拟方法吗?
我可以这样写吗?
<!-- language: lang-cpp -->
class BaseInterface
{
public:
virtual void fun_a() = 0;
virtual void fun_b() = 0;
virtual ~BaseInterface();
};
class Derived : public BaseInterface
{
void fun_a() { ... };
};
class FinalClass : public Derived
{
void fun_b() { ... };
}
int main()
{
FinalClass test_obj;
test_obj.fun_a(); // use Derived implementation or fail ???
test_obj.fun_b(); // use own implementation
BaseInterface* test_interface = new FinalClass();
test_interface->fun_a(); // fail or ok ???
test_interface->fun_b();
}
上面的代码正确吗?
是否存在其他虚方法outflank
?
纯虚方法总是必须在派生类中重新实现吗?
实际上是一个将要被实例化的派生类
在你的代码中,你没有从Derived
中创建一个对象,所以它是OK的。
我可以这样写吗?
是的。
你有一些小错误,我纠正了它们:
class BaseInterface
{
public:
virtual void fun_a() = 0;
virtual void fun_b() = 0;
virtual ~BaseInterface() {}; // You forget this
};
class Derived : public BaseInterface
{
public:
void fun_a() {} // This should be public as its base
};
class FinalClass : public Derived
{
public:
void fun_b() {} // This should be public as its base
};
int main()
{
FinalClass test_obj;
test_obj.fun_a();
test_obj.fun_b();
BaseInterface* test_interface = new FinalClass();
test_interface->fun_a();
test_interface->fun_b();
}
这使得Derived
也是一个抽象类,你不能实例化,看到你不从它的基实现所有的virtual
函数,它成为一个抽象类,你不能直接实例化。
请看这里:liveworkspace.org/code/6huYU$10
代码正确。c++中没有接口的特殊概念。都是类。有些类方法可以是纯虚的。它只意味着编译器不能创建这样一个类的实例。
相关文章:
- Qt Quick - 如何在 qml 接口中使用继承自 QQuickPaintedItem 的 c++ 类?
- C++接口继承不同的参数方法
- c++ com 如何继承 IUIAutomationPropertyChangedEventHandler 接口
- C++ 使用接口和默认实现继承
- C++ 通过接口使用从其他几个类继承的类
- 如何在C++中访问 DirectWrite 继承的接口?
- 接口的钻石继承(C++)
- 将实现从继承的 CRTP 注入到继承的接口类
- C++:继承自基类和具有公共基接口的多个接口
- 接口实现和私有继承之间的交互
- 替代与djinni的接口继承
- C++ 接口类继承自具体类是否合理
- C++接口、继承、多态性
- 继承接口实现
- 继承C++接口和 LSP 冲突
- 为什么C++不允许基类实现派生类的继承接口?
- 物理引擎的继承/接口决策
- 使用继承接口的类的子类方法
- 我的类如何继承接口和QObject
- 从基础对象继承接口是一种好的做法吗