在 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;
};
我知道这个问题有点奇怪,但请耐心等待。
我正在为停车场设计 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;
};