可能是重复问题:
如何在C++中声明接口?
C++中的类接口和Java中的类接口一样吗?
我是一名Java程序员,正在学习C++,想知道C++中是否有像Java接口这样的东西,即另一个类可以实现/扩展多个接口。
谢谢。 p.s. 这里是新手,请告诉我是否做错了什么。
可能是重复问题:
如何在C++中声明接口?
C++中的类接口和Java中的类接口一样吗?
我是一名Java程序员,正在学习C++,想知道C++中是否有像Java接口这样的东西,即另一个类可以实现/扩展多个接口。
谢谢。 p.s. 这里是新手,请告诉我是否做错了什么。
在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.
}
};
IDestructible
接口)。 - Abyx为了模拟Java中的interface
,您可以使用仅有纯虚函数的普通基类。
您需要使用虚继承,否则您可能会得到重复继承:在C++中,同一类可以成为多个基类。这意味着在这种情况下访问该基类将是不明确的。
C++ 没有提供与Java interface
完全相等的功能:在C++中,只能在具有虚函数声明的类的派生类中重写虚函数,而在Java中,可以在基类中声明方法的覆盖者。
[例子:
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 的任意限制呢?
编辑:添加了示例以进行澄清。