在 C++ 中创建接口的对象

Creating an object of an interface in C++

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

我正在为停车场设计 OOD。我只想允许那些具有 autopark 功能的车辆停放。在 Java 中,我会创建一个界面,并且只允许该界面的对象(即具有 autopark 功能的汽车)停放。在 C++ 中,接口是使用带有纯虚方法的抽象 类 创建的。所以,我无法创建此 'C++ interface' 的对象。那么,我如何在 C++ 中实现这一点?

注意:我知道其他技术,例如使用一些标志来表示 autopark 功能的存在或不存在等;但我对这些解决方法不感兴趣。

您正在寻找一种创建匿名混凝土的方法classes。

在 C++ 中,您可以通过将 structure/class 视为变量声明的 'type' 来创建匿名结构。下面,我们有实现 class(请注意,它是匿名的,但仍然扩展 Foo,我们的 pure-virtual/'abstract' 基础 class),而不是以结尾分号,我们给它一个变量名来立即在堆栈上分配那个匿名 class 的实例。

因此,这就是为什么 classC 和 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;
};