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

Creating an object of an interface in C++

本文关键字:对象 接口 创建 C++      更新时间:2023-10-16

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

我正在为停车场设计一个 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;
};