在C++中创建接口的对象
Creating an object of an interface in C++
我知道这个问题有点奇怪,但请耐心等待。
我正在为停车场设计一个 OOD。 我只想允许那些具有autopark
功能的车辆停放。 在Java中,我会创建一个接口,只有该接口的对象(即具有autopark
特征的汽车(才能被允许停车。 在C++中,接口是使用具有纯虚拟方法的抽象类创建的。 因此,我无法创建此"C++接口"的对象。 那么,如何在C++中实现这一目标呢?
注意:我知道其他技术,例如使用某些标志来表示autopark
功能的存在与否等;但我对这些解决方法不感兴趣。
您正在寻找一种创建匿名具体类的方法。
在C++中,您可以通过将结构/类视为变量声明的"类型"来创建匿名结构。下面,我们有实现类(请注意,它是匿名的,但仍然扩展Foo
,我们的纯虚拟/"抽象"基类(,而不是以分号结尾,我们给它一个变量名称,以立即在堆栈上分配该匿名类的实例。
因此,这就是为什么 C 和 C++ 中的类、结构和枚举都必须以分号结尾(而像 namespace
这样的东西则不以分号结尾(。
#include <iostream>
using namespace std;
class Foo {
public:
virtual void bar() = 0;
};
void callBar(Foo *foo) {
foo->bar();
}
int main() {
class : public Foo {
virtual void bar() {
cout << "Hello from foo1" << endl;
}
} foo1; // <-- Note that we immediately create foo1 here...
class : public Foo {
virtual void bar() {
cout << "Bonjour from foo2" << endl;
}
} foo2; // <-- ... and foo2 here.
callBar(&foo1);
callBar(&foo2);
return 0;
};
相关文章:
- 在C ++ ASIO中,如何为HTTP或HTTPS创建相同的套接字对象(接口/抽象问题?
- 无法使用接口类型对priority_queue中的对象进行排序<T>
- 防止通过接口删除对象
- 如何通过接口将函子分配给函数对象
- C++接口实现和子类化对象识别
- 2 个 COM 对象,并在另一个对象中使用其中一个对象的接口
- 在构造函数处将类对象强制转换为接口始终返回 NULL
- 尝试向 COM 对象添加另一个接口时出现静态强制转换错误 C2440
- C++ 中的 if 语句中的接口对象
- 我们可以在同一对象中实现多个QtRO接口吗?
- C++实现相同接口的对象/类之间的数据共享
- neak_ptr vs unique_ptr参考 - 传递接口inmand tos to其他对象
- 如何使用 word 对象模型中的C++接口在 word 中添加自定义 XML 艺术
- OOP - 存储对象和服务接口
- 如何在接口类中创建一个超类对象
- Python - 导入 c++ 模块接口 - 无法打开共享对象文件
- 如何为对象提供不同的接口(最佳)
- 如何从MFC DLL中获取与COM包裹的C#对象的接口
- 避免在 Linux 下的共享对象 C 接口上重整名称
- 如何将c类公开为com对象接口