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

可能的重复:
如何在C++中声明接口?
像在c ++中的java中的接口?

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


答案 1

在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.
    }
};

答案 2

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

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

C++没有提供Java的确切等价物:C++,重写虚函数只能在具有虚函数声明的类的派生类中完成,而在Java中,a中方法的重写器可以在基类中声明。interfaceinterface

[示例:

struct B1 {
    void foo ();
};

struct B2 {
    virtual void foo () = 0;
};

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

D继承 too 函数声明:和 。B1::foo()B2::foo()

B2::foo()是纯粹的虚拟,也是; 不重写,因为 不是 的派生类。D::B2::foo()B1::foo()B2::foo()B2B1

因此,是一个抽象类。D

--结束示例]

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

编辑:添加了说明示例。


推荐