gpt4 book ai didi

c++ - 在 C++ 中创建接口(interface)的对象

转载 作者:太空狗 更新时间:2023-10-29 21:14:02 25 4
gpt4 key购买 nike

我知道这个问题有点奇怪,但请耐心等待。

我正在为 parking 场设计 OOD。我只想允许那些具有 autopark 功能的车辆停放。在 Java 中,我会创建一个接口(interface),并且只允许该接口(interface)的对象(即具有 autopark 功能的汽车)停放。在 C++ 中,接口(interface)是使用具有纯虚方法的抽象类创建的。所以,我无法创建这个“C++ 接口(interface)”的对象。那么,我如何在 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++ - 在 C++ 中创建接口(interface)的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42045974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com