相当于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 };
D
inheritance了函数声明: B1::foo()
和B2::foo()
。
B2::foo()
是纯虚拟的,所以D::B2::foo()
也是如此; B1::foo()
不会覆盖B2::foo()
因为B2
不是B1
的派生类。
因此, D
是一个抽象类。
– 末端示例]
无论如何, 为什么要在C ++中模拟Java的任意限制?
编辑:添加了澄清的例子。