C++ 在C+中创建接口的对象+;
我知道这个问题有点奇怪,但请容忍我 我正在为一个停车场设计一个OOD。我只允许那些具有C++ 在C+中创建接口的对象+;,c++,object-oriented-analysis,C++,Object Oriented Analysis,我知道这个问题有点奇怪,但请容忍我 我正在为一个停车场设计一个OOD。我只允许那些具有自动停车功能的车辆停车。在Java中,我会创建一个接口,并且只允许该接口的对象(即具有自动停车功能的汽车)停车。在C++中,接口使用纯虚拟方法使用抽象类来创建。因此,我无法创建此“C++接口”的对象。那么,如何在C++中实现这一点?p> 注意:我知道其他技术,比如使用一些标志来表示是否存在autopark功能等;但我对这些变通办法不感兴趣 您正在寻找一种创建匿名具体类的方法 在C++中,可以通过将结构/类作为变
自动停车功能的车辆停车。在Java中,我会创建一个接口,并且只允许该接口的对象(即具有自动停车
功能的汽车)停车。在C++中,接口使用纯虚拟方法使用抽象类来创建。因此,我无法创建此“C++接口”的对象。那么,如何在C++中实现这一点?p>
注意:我知道其他技术,比如使用一些标志来表示是否存在autopark
功能等;但我对这些变通办法不感兴趣 您正在寻找一种创建匿名具体类的方法
在C++中,可以通过将结构/类作为变量声明的“类型”来创建匿名结构。下面是实现类(请注意,它是匿名的,但仍然扩展了Foo
,我们的纯虚拟/'abstract'基类),我们没有以分号结尾,而是给它一个变量名,以便立即在堆栈上分配该匿名类的实例
<>因此,这就是为什么C和C++中的类、结构和枚举必须以分号结尾(而像<代码>命名空间< /代码>不一样)。
#包括
使用名称空间std;
福班{
公众:
虚拟空心条()=0;
};
无效调用栏(Foo*Foo){
foo->bar();
}
int main(){
类别:公共食品{
虚拟空心条(){
CUT也不能在java中创建接口类型的对象。这里没有区别。@克里斯,使用匿名类?类似于?创建一个实现接口的具体匿名类对象。删除java问题标签。您可能在讨论您的java,但它全部是关于C++的。@ HovercraftFullOfEels、 对不起,谢谢你把标签去掉。
#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;
};