可能重复:
How do you declare an interface in C++?
Interface as in java in c++?
我是一名学习C ++的Java程序员,我想知道C ++中是否存在类似Java接口的东西,即另一个类可以实现/扩展多个类的类。 谢谢。 附:新来的,请告诉我,如果我做错了什么。
答案 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的任意限制?
编辑:添加了澄清的例子。