相当于C ++中的Java接口?

可能重复:
你如何在C ++中声明一个接口?
接口与c ++中的java一样?

我是一名学习C ++的Java程序员,我想知道C ++中是否存在类似Java接口的东西,即另一个类可以实现/扩展多个类的类。 谢谢。 ps新来这里告诉我,如果我做错了什么。

在C ++中,仅包含纯虚方法的类表示接口。

例:

// Define the Serializable interface. class Serializable { // virtual destructor is required if the object may // be deleted through a pointer to Serializable virtual ~Serializable() {} virtual std::string serialize() const = 0; }; // Implements the Serializable interface class MyClass : public MyBaseClass, public virtual Serializable { virtual std::string serialize() const { // Implementation goes here. } }; 

要模拟Java interface ,您可以使用仅具有纯虚函数的普通基础。

您需要使用虚拟inheritance,否则您可能会重复inheritance :在C ++中,同一个类可以多次成为基类。 这意味着在这种情况下,此基类的访问将是不明确的。

C ++ 没有提供与Java interface完全等价的东西:在C ++中,覆盖虚函数只能在具有虚函数声明的类的派生类中完成,而在Java中,可以声明interface方法的覆盖在基类中。

[例:

 struct B1 { void foo (); }; struct B2 { virtual void foo () = 0; }; struct D : B1, B2 { // no declaration of foo() here }; 

Dinheritance了函数声明: B1::foo()B2::foo()

B2::foo()是纯虚拟的,所以D::B2::foo()也是如此; B1::foo()不会覆盖B2::foo()因为B2不是B1的派生类。

因此, D是一个抽象类。

– 末端示例]

无论如何, 为什么要在C ++中模拟Java的任意限制?

编辑:添加了澄清的例子。