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

时间:2012-08-14 04:55:05

标签: java c++ override abstract-class virtual-inheritance

  

可能重复:
  How do you declare an interface in C++?
  Interface as in java in c++?

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

2 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:-5)

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

您需要使用虚拟继承,否则您可以获得重复继承:在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
};

D继承了函数声明:B1::foo()B2::foo()

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

因此,D是一个抽象类。

- 结束示例]

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

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