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

Equivalent of Java interfaces in C++?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do you declare an interface in C++?
Interface as in java in c++?

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


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

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 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 EDCOX1(0),可以使用只具有纯虚函数的普通基。

您需要使用虚拟继承,否则可以获得重复继承:在C++中,同一类可以是一次以上的基类。这意味着在这种情况下,对这个基类的访问是不明确的。

C++没有提供与Java EDCOX1(0)完全等价的内容:在C++中,重写虚拟函数只能在具有虚拟函数声明的类的派生类中完成,而在Java中,EDCOX1×0的方法中的重写器可以在基类中声明。

例:

1
2
3
4
5
6
7
8
9
10
11
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(),因为B2不是B1的派生类。

因此,D是一个抽象类。

最后的例子

不管怎么说,你为什么要在C++中模拟Java的任意限制?

编辑:添加了澄清示例。